/*
    http://www.JSON.org/json2.js
    2011-02-23

    Public Domain.

    NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.

    See http://www.JSON.org/js.html


    This code should be minified before deployment.
    See http://javascript.crockford.com/jsmin.html

    USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
    NOT CONTROL.


    This file creates a global JSON object containing two methods: stringify
    and parse.

        JSON.stringify(value, replacer, space)
            value       any JavaScript value, usually an object or array.

            replacer    an optional parameter that determines how object
                        values are stringified for objects. It can be a
                        function or an array of strings.

            space       an optional parameter that specifies the indentation
                        of nested structures. If it is omitted, the text will
                        be packed without extra whitespace. If it is a number,
                        it will specify the number of spaces to indent at each
                        level. If it is a string (such as '\t' or '&nbsp;'),
                        it contains the characters used to indent at each level.

            This method produces a JSON text from a JavaScript value.

            When an object value is found, if the object contains a toJSON
            method, its toJSON method will be called and the result will be
            stringified. A toJSON method does not serialize: it returns the
            value represented by the name/value pair that should be serialized,
            or undefined if nothing should be serialized. The toJSON method
            will be passed the key associated with the value, and this will be
            bound to the value

            For example, this would serialize Dates as ISO strings.

                Date.prototype.toJSON = function (key) {
                    function f(n) {
                        // Format integers to have at least two digits.
                        return n < 10 ? '0' + n : n;
                    }

                    return this.getUTCFullYear()   + '-' +
                         f(this.getUTCMonth() + 1) + '-' +
                         f(this.getUTCDate())      + 'T' +
                         f(this.getUTCHours())     + ':' +
                         f(this.getUTCMinutes())   + ':' +
                         f(this.getUTCSeconds())   + 'Z';
                };

            You can provide an optional replacer method. It will be passed the
            key and value of each member, with this bound to the containing
            object. The value that is returned from your method will be
            serialized. If your method returns undefined, then the member will
            be excluded from the serialization.

            If the replacer parameter is an array of strings, then it will be
            used to select the members to be serialized. It filters the results
            such that only members with keys listed in the replacer array are
            stringified.

            Values that do not have JSON representations, such as undefined or
            functions, will not be serialized. Such values in objects will be
            dropped; in arrays they will be replaced with null. You can use
            a replacer function to replace those with JSON values.
            JSON.stringify(undefined) returns undefined.

            The optional space parameter produces a stringification of the
            value that is filled with line breaks and indentation to make it
            easier to read.

            If the space parameter is a non-empty string, then that string will
            be used for indentation. If the space parameter is a number, then
            the indentation will be that many spaces.

            Example:

            text = JSON.stringify(['e', {pluribus: 'unum'}]);
            // text is '["e",{"pluribus":"unum"}]'


            text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t');
            // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'

            text = JSON.stringify([new Date()], function (key, value) {
                return this[key] instanceof Date ?
                    'Date(' + this[key] + ')' : value;
            });
            // text is '["Date(---current time---)"]'


        JSON.parse(text, reviver)
            This method parses a JSON text to produce an object or array.
            It can throw a SyntaxError exception.

            The optional reviver parameter is a function that can filter and
            transform the results. It receives each of the keys and values,
            and its return value is used instead of the original value.
            If it returns what it received, then the structure is not modified.
            If it returns undefined then the member is deleted.

            Example:

            // Parse the text. Values that look like ISO date strings will
            // be converted to Date objects.

            myData = JSON.parse(text, function (key, value) {
                var a;
                if (typeof value === 'string') {
                    a =
/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
                    if (a) {
                        return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
                            +a[5], +a[6]));
                    }
                }
                return value;
            });

            myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
                var d;
                if (typeof value === 'string' &&
                        value.slice(0, 5) === 'Date(' &&
                        value.slice(-1) === ')') {
                    d = new Date(value.slice(5, -1));
                    if (d) {
                        return d;
                    }
                }
                return value;
            });


    This is a reference implementation. You are free to copy, modify, or
    redistribute.
*/
/*jslint evil: true, strict: false, regexp: false */
/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply,
    call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
    getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
    lastIndex, length, parse, prototype, push, replace, slice, stringify,
    test, toJSON, toString, valueOf
*/
// Create a JSON object only if one does not already exist. We create the
// methods in a closure to avoid creating global variables.
var JSON;
JSON || (JSON = {}),
function() {
    "use strict";
    function f(e) {
        return e < 10 ? "0" + e: e
    }
    function quote(e) {
        return escapable.lastIndex = 0,
        escapable.test(e) ? '"' + e.replace(escapable,
        function(e) {
            var t = meta[e];
            return typeof t == "string" ? t: "\\u" + ("0000" + e.charCodeAt(0).toString(16)).slice( - 4)
        }) + '"': '"' + e + '"'
    }
    function str(e, t) {
        var n, r, i, s, o = gap,
        u, a = t[e];
        a && typeof a == "object" && typeof a.toJSON == "function" && (a = a.toJSON(e)),
        typeof rep == "function" && (a = rep.call(t, e, a));
        switch (typeof a) {
        case "string":
            return quote(a);
        case "number":
            return isFinite(a) ? String(a) : "null";
        case "boolean":
        case "null":
            return String(a);
        case "object":
            if (!a) return "null";
            gap += indent,
            u = [];
            if (Object.prototype.toString.apply(a) === "[object Array]") {
                s = a.length;
                for (n = 0; n < s; n += 1) u[n] = str(n, a) || "null";
                return i = u.length === 0 ? "[]": gap ? "[\n" + gap + u.join(",\n" + gap) + "\n" + o + "]": "[" + u.join(",") + "]",
                gap = o,
                i
            }
            if (rep && typeof rep == "object") {
                s = rep.length;
                for (n = 0; n < s; n += 1) typeof rep[n] == "string" && (r = rep[n], i = str(r, a), i && u.push(quote(r) + (gap ? ": ": ":") + i))
            } else for (r in a) Object.prototype.hasOwnProperty.call(a, r) && (i = str(r, a), i && u.push(quote(r) + (gap ? ": ": ":") + i));
            return i = u.length === 0 ? "{}": gap ? "{\n" + gap + u.join(",\n" + gap) + "\n" + o + "}": "{" + u.join(",") + "}",
            gap = o,
            i
        }
    }
    typeof Date.prototype.toJSON != "function" && (Date.prototype.toJSON = function(e) {
        return isFinite(this.valueOf()) ? this.getUTCFullYear() + "-" + f(this.getUTCMonth() + 1) + "-" + f(this.getUTCDate()) + "T" + f(this.getUTCHours()) + ":" + f(this.getUTCMinutes()) + ":" + f(this.getUTCSeconds()) + "Z": null
    },
    String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function(e) {
        return this.valueOf()
    });
    var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
    escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
    gap, indent, meta = {
        "\b": "\\b",
        "	": "\\t",
        "\n": "\\n",
        "\f": "\\f",
        "\r": "\\r",
        '"': '\\"',
        "\\": "\\\\"
    },
    rep;
    typeof JSON.stringify != "function" && (JSON.stringify = function(e, t, n) {
        var r;
        gap = "",
        indent = "";
        if (typeof n == "number") for (r = 0; r < n; r += 1) indent += " ";
        else typeof n == "string" && (indent = n);
        rep = t;
        if (!t || typeof t == "function" || typeof t == "object" && typeof t.length == "number") return str("", {
            "": e
        });
        throw new Error("JSON.stringify")
    }),
    typeof JSON.parse != "function" && (JSON.parse = function(text, reviver) {
        function walk(e, t) {
            var n, r, i = e[t];
            if (i && typeof i == "object") for (n in i) Object.prototype.hasOwnProperty.call(i, n) && (r = walk(i, n), r !== undefined ? i[n] = r: delete i[n]);
            return reviver.call(e, t, i)
        }
        var j;
        text = String(text),
        cx.lastIndex = 0,
        cx.test(text) && (text = text.replace(cx,
        function(e) {
            return "\\u" + ("0000" + e.charCodeAt(0).toString(16)).slice( - 4)
        }));
        if (/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]").replace(/(?:^|:|,)(?:\s*\[)+/g, ""))) return j = eval("(" + text + ")"),
        typeof reviver == "function" ? walk({
            "": j
        },
        "") : j;
        throw new SyntaxError("JSON.parse")
    })
} (),
function() {
    var e = !1,
    t = /xyz/.test(function() {
        xyz
    }) ? /\b_super\b/: /.*/;
    this.Class = function() {},
    Class.extend = function(n) {
        function o() { ! e && this.init && this.init.apply(this, arguments)
        }
        var r = this.prototype;
        e = !0;
        var i = new this;
        e = !1;
        for (var s in n) i[s] = typeof n[s] == "function" && typeof r[s] == "function" && t.test(n[s]) ?
        function(e, t) {
            return function() {
                var n = this._super;
                this._super = r[e];
                var i = t.apply(this, arguments);
                return this._super = n,
                i
            }
        } (s, n[s]) : n[s];
        return o.prototype = i,
        o.constructor = o,
        o.extend = arguments.callee,
        o
    }
} (),
function(e, t) {
    function u(e) {
        var t = o[e] = {},
        n,
        r;
        e = e.split(/\s+/);
        for (n = 0, r = e.length; n < r; n++) t[e[n]] = !0;
        return t
    }
    function c(e, n, r) {
        if (r === t && e.nodeType === 1) {
            var i = "data-" + n.replace(l, "-$1").toLowerCase();
            r = e.getAttribute(i);
            if (typeof r == "string") {
                try {
                    r = r === "true" ? !0 : r === "false" ? !1 : r === "null" ? null: s.isNumeric(r) ? parseFloat(r) : f.test(r) ? s.parseJSON(r) : r
                } catch(o) {}
                s.data(e, n, r)
            } else r = t
        }
        return r
    }
    function h(e) {
        for (var t in e) {
            if (t === "data" && s.isEmptyObject(e[t])) continue;
            if (t !== "toJSON") return ! 1
        }
        return ! 0
    }
    function p(e, t, n) {
        var r = t + "defer",
        i = t + "queue",
        o = t + "mark",
        u = s._data(e, r);
        u && (n === "queue" || !s._data(e, i)) && (n === "mark" || !s._data(e, o)) && setTimeout(function() { ! s._data(e, i) && !s._data(e, o) && (s.removeData(e, r, !0), u.fire())
        },
        0)
    }
    function H() {
        return ! 1
    }
    function B() {
        return ! 0
    }
    function W(e) {
        return ! e || !e.parentNode || e.parentNode.nodeType === 11
    }
    function X(e, t, n) {
        t = t || 0;
        if (s.isFunction(t)) return s.grep(e,
        function(e, r) {
            var i = !!t.call(e, r, e);
            return i === n
        });
        if (t.nodeType) return s.grep(e,
        function(e, r) {
            return e === t === n
        });
        if (typeof t == "string") {
            var r = s.grep(e,
            function(e) {
                return e.nodeType === 1
            });
            if (q.test(t)) return s.filter(t, r, !n);
            t = s.filter(t, r)
        }
        return s.grep(e,
        function(e, r) {
            return s.inArray(e, t) >= 0 === n
        })
    }
    function V(e) {
        var t = $.split("|"),
        n = e.createDocumentFragment();
        if (n.createElement) while (t.length) n.createElement(t.pop());
        return n
    }
    function at(e, t) {
        return s.nodeName(e, "table") ? e.getElementsByTagName("tbody")[0] || e.appendChild(e.ownerDocument.createElement("tbody")) : e
    }
    function ft(e, t) {
        if (t.nodeType !== 1 || !s.hasData(e)) return;
        var n, r, i, o = s._data(e),
        u = s._data(t, o),
        a = o.events;
        if (a) {
            delete u.handle,
            u.events = {};
            for (n in a) for (r = 0, i = a[n].length; r < i; r++) s.event.add(t, n + (a[n][r].namespace ? ".": "") + a[n][r].namespace, a[n][r], a[n][r].data)
        }
        u.data && (u.data = s.extend({},
        u.data))
    }
    function lt(e, t) {
        var n;
        if (t.nodeType !== 1) return;
        t.clearAttributes && t.clearAttributes(),
        t.mergeAttributes && t.mergeAttributes(e),
        n = t.nodeName.toLowerCase();
        if (n === "object") t.outerHTML = e.outerHTML;
        else if (n !== "input" || e.type !== "checkbox" && e.type !== "radio") {
            if (n === "option") t.selected = e.defaultSelected;
            else if (n === "input" || n === "textarea") t.defaultValue = e.defaultValue
        } else e.checked && (t.defaultChecked = t.checked = e.checked),
        t.value !== e.value && (t.value = e.value);
        t.removeAttribute(s.expando)
    }
    function ct(e) {
        return typeof e.getElementsByTagName != "undefined" ? e.getElementsByTagName("*") : typeof e.querySelectorAll != "undefined" ? e.querySelectorAll("*") : []
    }
    function ht(e) {
        if (e.type === "checkbox" || e.type === "radio") e.defaultChecked = e.checked
    }
    function pt(e) {
        var t = (e.nodeName || "").toLowerCase();
        t === "input" ? ht(e) : t !== "script" && typeof e.getElementsByTagName != "undefined" && s.grep(e.getElementsByTagName("input"), ht)
    }
    function dt(e) {
        var t = n.createElement("div");
        return ut.appendChild(t),
        t.innerHTML = e.outerHTML,
        t.firstChild
    }
    function vt(e, t) {
        t.src ? s.ajax({
            url: t.src,
            async: !1,
            dataType: "script"
        }) : s.globalEval((t.text || t.textContent || t.innerHTML || "").replace(st, "/*$0*/")),
        t.parentNode && t.parentNode.removeChild(t)
    }
    function Lt(e, t, n) {
        var r = t === "width" ? e.offsetWidth: e.offsetHeight,
        i = t === "width" ? xt: Tt,
        o = 0,
        u = i.length;
        if (r > 0) {
            if (n !== "border") for (; o < u; o++) n || (r -= parseFloat(s.css(e, "padding" + i[o])) || 0),
            n === "margin" ? r += parseFloat(s.css(e, n + i[o])) || 0 : r -= parseFloat(s.css(e, "border" + i[o] + "Width")) || 0;
            return r + "px"
        }
        r = Nt(e, t, t);
        if (r < 0 || r == null) r = e.style[t] || 0;
        r = parseFloat(r) || 0;
        if (n) for (; o < u; o++) r += parseFloat(s.css(e, "padding" + i[o])) || 0,
        n !== "padding" && (r += parseFloat(s.css(e, "border" + i[o] + "Width")) || 0),
        n === "margin" && (r += parseFloat(s.css(e, n + i[o])) || 0);
        return r + "px"
    }
    function Gt(e) {
        return function(t, n) {
            typeof t != "string" && (n = t, t = "*");
            if (s.isFunction(n)) {
                var r = t.toLowerCase().split(Rt),
                i = 0,
                o = r.length,
                u,
                a,
                f;
                for (; i < o; i++) u = r[i],
                f = /^\+/.test(u),
                f && (u = u.substr(1) || "*"),
                a = e[u] = e[u] || [],
                a[f ? "unshift": "push"](n)
            }
        }
    }
    function Yt(e, n, r, i, s, o) {
        s = s || n.dataTypes[0],
        o = o || {},
        o[s] = !0;
        var u = e[s],
        a = 0,
        f = u ? u.length: 0,
        l = e === Xt,
        c;
        for (; a < f && (l || !c); a++) c = u[a](n, r, i),
        typeof c == "string" && (!l || o[c] ? c = t: (n.dataTypes.unshift(c), c = Yt(e, n, r, i, c, o)));
        return (l || !c) && !o["*"] && (c = Yt(e, n, r, i, "*", o)),
        c
    }
    function Zt(e, n) {
        var r, i, o = s.ajaxSettings.flatOptions || {};
        for (r in n) n[r] !== t && ((o[r] ? e: i || (i = {}))[r] = n[r]);
        i && s.extend(!0, e, i)
    }
    function en(e, t, n, r) {
        if (s.isArray(t)) s.each(t,
        function(t, i) {
            n || Ot.test(e) ? r(e, i) : en(e + "[" + (typeof i == "object" || s.isArray(i) ? t: "") + "]", i, n, r)
        });
        else if (!n && t != null && typeof t == "object") for (var i in t) en(e + "[" + i + "]", t[i], n, r);
        else r(e, t)
    }
    function tn(e, n, r) {
        var i = e.contents,
        s = e.dataTypes,
        o = e.responseFields,
        u, a, f, l;
        for (a in o) a in r && (n[o[a]] = r[a]);
        while (s[0] === "*") s.shift(),
        u === t && (u = e.mimeType || n.getResponseHeader("content-type"));
        if (u) for (a in i) if (i[a] && i[a].test(u)) {
            s.unshift(a);
            break
        }
        if (s[0] in r) f = s[0];
        else {
            for (a in r) {
                if (!s[0] || e.converters[a + " " + s[0]]) {
                    f = a;
                    break
                }
                l || (l = a)
            }
            f = f || l
        }
        if (f) return f !== s[0] && s.unshift(f),
        r[f]
    }
    function nn(e, n) {
        e.dataFilter && (n = e.dataFilter(n, e.dataType));
        var r = e.dataTypes,
        i = {},
        o, u, a = r.length,
        f, l = r[0],
        c,
        h,
        p,
        d,
        v;
        for (o = 1; o < a; o++) {
            if (o === 1) for (u in e.converters) typeof u == "string" && (i[u.toLowerCase()] = e.converters[u]);
            c = l,
            l = r[o];
            if (l === "*") l = c;
            else if (c !== "*" && c !== l) {
                h = c + " " + l,
                p = i[h] || i["* " + l];
                if (!p) {
                    v = t;
                    for (d in i) {
                        f = d.split(" ");
                        if (f[0] === c || f[0] === "*") {
                            v = i[f[1] + " " + l];
                            if (v) {
                                d = i[d],
                                d === !0 ? p = v: v === !0 && (p = d);
                                break
                            }
                        }
                    }
                } ! p && !v && s.error("No conversion from " + h.replace(" ", " to ")),
                p !== !0 && (n = p ? p(n) : v(d(n)))
            }
        }
        return n
    }
    function fn() {
        try {
            return new e.XMLHttpRequest
        } catch(t) {}
    }
    function ln() {
        try {
            return new e.ActiveXObject("Microsoft.XMLHTTP")
        } catch(t) {}
    }
    function bn() {
        return setTimeout(wn, 0),
        yn = s.now()
    }
    function wn() {
        yn = t
    }
    function En(e, t) {
        var n = {};
        return s.each(gn.concat.apply([], gn.slice(0, t)),
        function() {
            n[this] = e
        }),
        n
    }
    function Sn(e) {
        if (!cn[e]) {
            var t = n.body,
            r = s("<" + e + ">").appendTo(t),
            i = r.css("display");
            r.remove();
            if (i === "none" || i === "") {
                hn || (hn = n.createElement("iframe"), hn.frameBorder = hn.width = hn.height = 0),
                t.appendChild(hn);
                if (!pn || !hn.createElement) pn = (hn.contentWindow || hn.contentDocument).document,
                pn.write((n.compatMode === "CSS1Compat" ? "<!doctype html>": "") + "<html><body>"),
                pn.close();
                r = pn.createElement(e),
                pn.body.appendChild(r),
                i = s.css(r, "display"),
                t.removeChild(hn)
            }
            cn[e] = i
        }
        return cn[e]
    }
    function Nn(e) {
        return s.isWindow(e) ? e: e.nodeType === 9 ? e.defaultView || e.parentWindow: !1
    }
    var n = e.document,
    r = e.navigator,
    i = e.location,
    s = function() {
        function H() {
            if (i.isReady) return;
            try {
                n.documentElement.doScroll("left")
            } catch(e) {
                setTimeout(H, 1);
                return
            }
            i.ready()
        }
        var i = function(e, t) {
            return new i.fn.init(e, t, u)
        },
        s = e.jQuery,
        o = e.$,
        u,
        a = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
        f = /\S/,
        l = /^\s+/,
        c = /\s+$/,
        h = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
        p = /^[\],:{}\s]*$/,
        d = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
        v = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
        m = /(?:^|:|,)(?:\s*\[)+/g,
        g = /(webkit)[ \/]([\w.]+)/,
        y = /(opera)(?:.*version)?[ \/]([\w.]+)/,
        b = /(msie) ([\w.]+)/,
        w = /(mozilla)(?:.*? rv:([\w.]+))?/,
        E = /-([a-z]|[0-9])/ig,
        S = /^-ms-/,
        x = function(e, t) {
            return (t + "").toUpperCase()
        },
        T = r.userAgent,
        N,
        C,
        k,
        L = Object.prototype.toString,
        A = Object.prototype.hasOwnProperty,
        O = Array.prototype.push,
        M = Array.prototype.slice,
        _ = String.prototype.trim,
        D = Array.prototype.indexOf,
        P = {};
        return i.fn = i.prototype = {
            constructor: i,
            init: function(e, r, s) {
                var o, u, f, l;
                if (!e) return this;
                if (e.nodeType) return this.context = this[0] = e,
                this.length = 1,
                this;
                if (e === "body" && !r && n.body) return this.context = n,
                this[0] = n.body,
                this.selector = e,
                this.length = 1,
                this;
                if (typeof e == "string") {
                    e.charAt(0) === "<" && e.charAt(e.length - 1) === ">" && e.length >= 3 ? o = [null, e, null] : o = a.exec(e);
                    if (o && (o[1] || !r)) {
                        if (o[1]) return r = r instanceof i ? r[0] : r,
                        l = r ? r.ownerDocument || r: n,
                        f = h.exec(e),
                        f ? i.isPlainObject(r) ? (e = [n.createElement(f[1])], i.fn.attr.call(e, r, !0)) : e = [l.createElement(f[1])] : (f = i.buildFragment([o[1]], [l]), e = (f.cacheable ? i.clone(f.fragment) : f.fragment).childNodes),
                        i.merge(this, e);
                        u = n.getElementById(o[2]);
                        if (u && u.parentNode) {
                            if (u.id !== o[2]) return s.find(e);
                            this.length = 1,
                            this[0] = u
                        }
                        return this.context = n,
                        this.selector = e,
                        this
                    }
                    return ! r || r.jquery ? (r || s).find(e) : this.constructor(r).find(e)
                }
                return i.isFunction(e) ? s.ready(e) : (e.selector !== t && (this.selector = e.selector, this.context = e.context), i.makeArray(e, this))
            },
            selector: "",
            jquery: "1.7.1",
            length: 0,
            size: function() {
                return this.length
            },
            toArray: function() {
                return M.call(this, 0)
            },
            get: function(e) {
                return e == null ? this.toArray() : e < 0 ? this[this.length + e] : this[e]
            },
            pushStack: function(e, t, n) {
                var r = this.constructor();
                return i.isArray(e) ? O.apply(r, e) : i.merge(r, e),
                r.prevObject = this,
                r.context = this.context,
                t === "find" ? r.selector = this.selector + (this.selector ? " ": "") + n: t && (r.selector = this.selector + "." + t + "(" + n + ")"),
                r
            },
            each: function(e, t) {
                return i.each(this, e, t)
            },
            ready: function(e) {
                return i.bindReady(),
                C.add(e),
                this
            },
            eq: function(e) {
                return e = +e,
                e === -1 ? this.slice(e) : this.slice(e, e + 1)
            },
            first: function() {
                return this.eq(0)
            },
            last: function() {
                return this.eq( - 1)
            },
            slice: function() {
                return this.pushStack(M.apply(this, arguments), "slice", M.call(arguments).join(","))
            },
            map: function(e) {
                return this.pushStack(i.map(this,
                function(t, n) {
                    return e.call(t, n, t)
                }))
            },
            end: function() {
                return this.prevObject || this.constructor(null)
            },
            push: O,
            sort: [].sort,
            splice: [].splice
        },
        i.fn.init.prototype = i.fn,
        i.extend = i.fn.extend = function() {
            var e, n, r, s, o, u, a = arguments[0] || {},
            f = 1,
            l = arguments.length,
            c = !1;
            typeof a == "boolean" && (c = a, a = arguments[1] || {},
            f = 2),
            typeof a != "object" && !i.isFunction(a) && (a = {}),
            l === f && (a = this, --f);
            for (; f < l; f++) if ((e = arguments[f]) != null) for (n in e) {
                r = a[n],
                s = e[n];
                if (a === s) continue;
                c && s && (i.isPlainObject(s) || (o = i.isArray(s))) ? (o ? (o = !1, u = r && i.isArray(r) ? r: []) : u = r && i.isPlainObject(r) ? r: {},
                a[n] = i.extend(c, u, s)) : s !== t && (a[n] = s)
            }
            return a
        },
        i.extend({
            noConflict: function(t) {
                return e.$ === i && (e.$ = o),
                t && e.jQuery === i && (e.jQuery = s),
                i
            },
            isReady: !1,
            readyWait: 1,
            holdReady: function(e) {
                e ? i.readyWait++:i.ready(!0)
            },
            ready: function(e) {
                if (e === !0 && !--i.readyWait || e !== !0 && !i.isReady) {
                    if (!n.body) return setTimeout(i.ready, 1);
                    i.isReady = !0;
                    if (e !== !0 && --i.readyWait > 0) return;
                    C.fireWith(n, [i]),
                    i.fn.trigger && i(n).trigger("ready").off("ready")
                }
            },
            bindReady: function() {
                if (C) return;
                C = i.Callbacks("once memory");
                if (n.readyState === "complete") return setTimeout(i.ready, 1);
                if (n.addEventListener) n.addEventListener("DOMContentLoaded", k, !1),
                e.addEventListener("load", i.ready, !1);
                else if (n.attachEvent) {
                    n.attachEvent("onreadystatechange", k),
                    e.attachEvent("onload", i.ready);
                    var t = !1;
                    try {
                        t = e.frameElement == null
                    } catch(r) {}
                    n.documentElement.doScroll && t && H()
                }
            },
            isFunction: function(e) {
                return i.type(e) === "function"
            },
            isArray: Array.isArray ||
            function(e) {
                return i.type(e) === "array"
            },
            isWindow: function(e) {
                return e && typeof e == "object" && "setInterval" in e
            },
            isNumeric: function(e) {
                return ! isNaN(parseFloat(e)) && isFinite(e)
            },
            type: function(e) {
                return e == null ? String(e) : P[L.call(e)] || "object"
            },
            isPlainObject: function(e) {
                if (!e || i.type(e) !== "object" || e.nodeType || i.isWindow(e)) return ! 1;
                try {
                    if (e.constructor && !A.call(e, "constructor") && !A.call(e.constructor.prototype, "isPrototypeOf")) return ! 1
                } catch(n) {
                    return ! 1
                }
                var r;
                for (r in e);
                return r === t || A.call(e, r)
            },
            isEmptyObject: function(e) {
                for (var t in e) return ! 1;
                return ! 0
            },
            error: function(e) {
                throw new Error(e)
            },
            parseJSON: function(t) {
                if (typeof t != "string" || !t) return null;
                t = i.trim(t);
                if (e.JSON && e.JSON.parse) return e.JSON.parse(t);
                if (p.test(t.replace(d, "@").replace(v, "]").replace(m, ""))) return (new Function("return " + t))();
                i.error("Invalid JSON: " + t)
            },
            parseXML: function(n) {
                var r, s;
                try {
                    e.DOMParser ? (s = new DOMParser, r = s.parseFromString(n, "text/xml")) : (r = new ActiveXObject("Microsoft.XMLDOM"), r.async = "false", r.loadXML(n))
                } catch(o) {
                    r = t
                }
                return (!r || !r.documentElement || r.getElementsByTagName("parsererror").length) && i.error("Invalid XML: " + n),
                r
            },
            noop: function() {},
            globalEval: function(t) {
                t && f.test(t) && (e.execScript ||
                function(t) {
                    e.eval.call(e, t)
                })(t)
            },
            camelCase: function(e) {
                return e.replace(S, "ms-").replace(E, x)
            },
            nodeName: function(e, t) {
                return e.nodeName && e.nodeName.toUpperCase() === t.toUpperCase()
            },
            each: function(e, n, r) {
                var s, o = 0,
                u = e.length,
                a = u === t || i.isFunction(e);
                if (r) {
                    if (a) {
                        for (s in e) if (n.apply(e[s], r) === !1) break
                    } else for (; o < u;) if (n.apply(e[o++], r) === !1) break
                } else if (a) {
                    for (s in e) if (n.call(e[s], s, e[s]) === !1) break
                } else for (; o < u;) if (n.call(e[o], o, e[o++]) === !1) break;
                return e
            },
            trim: _ ?
            function(e) {
                return e == null ? "": _.call(e)
            }: function(e) {
                return e == null ? "": e.toString().replace(l, "").replace(c, "")
            },
            makeArray: function(e, t) {
                var n = t || [];
                if (e != null) {
                    var r = i.type(e);
                    e.length == null || r === "string" || r === "function" || r === "regexp" || i.isWindow(e) ? O.call(n, e) : i.merge(n, e)
                }
                return n
            },
            inArray: function(e, t, n) {
                var r;
                if (t) {
                    if (D) return D.call(t, e, n);
                    r = t.length,
                    n = n ? n < 0 ? Math.max(0, r + n) : n: 0;
                    for (; n < r; n++) if (n in t && t[n] === e) return n
                }
                return - 1
            },
            merge: function(e, n) {
                var r = e.length,
                i = 0;
                if (typeof n.length == "number") for (var s = n.length; i < s; i++) e[r++] = n[i];
                else while (n[i] !== t) e[r++] = n[i++];
                return e.length = r,
                e
            },
            grep: function(e, t, n) {
                var r = [],
                i;
                n = !!n;
                for (var s = 0,
                o = e.length; s < o; s++) i = !!t(e[s], s),
                n !== i && r.push(e[s]);
                return r
            },
            map: function(e, n, r) {
                var s, o, u = [],
                a = 0,
                f = e.length,
                l = e instanceof i || f !== t && typeof f == "number" && (f > 0 && e[0] && e[f - 1] || f === 0 || i.isArray(e));
                if (l) for (; a < f; a++) s = n(e[a], a, r),
                s != null && (u[u.length] = s);
                else for (o in e) s = n(e[o], o, r),
                s != null && (u[u.length] = s);
                return u.concat.apply([], u)
            },
            guid: 1,
            proxy: function(e, n) {
                if (typeof n == "string") {
                    var r = e[n];
                    n = e,
                    e = r
                }
                if (!i.isFunction(e)) return t;
                var s = M.call(arguments, 2),
                o = function() {
                    return e.apply(n, s.concat(M.call(arguments)))
                };
                return o.guid = e.guid = e.guid || o.guid || i.guid++,
                o
            },
            access: function(e, n, r, s, o, u) {
                var a = e.length;
                if (typeof n == "object") {
                    for (var f in n) i.access(e, f, n[f], s, o, r);
                    return e
                }
                if (r !== t) {
                    s = !u && s && i.isFunction(r);
                    for (var l = 0; l < a; l++) o(e[l], n, s ? r.call(e[l], l, o(e[l], n)) : r, u);
                    return e
                }
                return a ? o(e[0], n) : t
            },
            now: function() {
                return (new Date).getTime()
            },
            uaMatch: function(e) {
                e = e.toLowerCase();
                var t = g.exec(e) || y.exec(e) || b.exec(e) || e.indexOf("compatible") < 0 && w.exec(e) || [];
                return {
                    browser: t[1] || "",
                    version: t[2] || "0"
                }
            },
            sub: function() {
                function e(t, n) {
                    return new e.fn.init(t, n)
                }
                i.extend(!0, e, this),
                e.superclass = this,
                e.fn = e.prototype = this(),
                e.fn.constructor = e,
                e.sub = this.sub,
                e.fn.init = function(r, s) {
                    return s && s instanceof i && !(s instanceof e) && (s = e(s)),
                    i.fn.init.call(this, r, s, t)
                },
                e.fn.init.prototype = e.fn;
                var t = e(n);
                return e
            },
            browser: {}
        }),
        i.each("Boolean Number String Function Array Date RegExp Object".split(" "),
        function(e, t) {
            P["[object " + t + "]"] = t.toLowerCase()
        }),
        N = i.uaMatch(T),
        N.browser && (i.browser[N.browser] = !0, i.browser.version = N.version),
        i.browser.webkit && (i.browser.safari = !0),
        f.test(" ") && (l = /^[\s\xA0]+/, c = /[\s\xA0]+$/),
        u = i(n),
        n.addEventListener ? k = function() {
            n.removeEventListener("DOMContentLoaded", k, !1),
            i.ready()
        }: n.attachEvent && (k = function() {
            n.readyState === "complete" && (n.detachEvent("onreadystatechange", k), i.ready())
        }),
        i
    } (),
    o = {};
    s.Callbacks = function(e) {
        e = e ? o[e] || u(e) : {};
        var n = [],
        r = [],
        i,
        a,
        f,
        l,
        c,
        h = function(t) {
            var r, i, o, u, a;
            for (r = 0, i = t.length; r < i; r++) o = t[r],
            u = s.type(o),
            u === "array" ? h(o) : u === "function" && (!e.unique || !d.has(o)) && n.push(o)
        },
        p = function(t, s) {
            s = s || [],
            i = !e.memory || [t, s],
            a = !0,
            c = f || 0,
            f = 0,
            l = n.length;
            for (; n && c < l; c++) if (n[c].apply(t, s) === !1 && e.stopOnFalse) {
                i = !0;
                break
            }
            a = !1,
            n && (e.once ? i === !0 ? d.disable() : n = [] : r && r.length && (i = r.shift(), d.fireWith(i[0], i[1])))
        },
        d = {
            add: function() {
                if (n) {
                    var e = n.length;
                    h(arguments),
                    a ? l = n.length: i && i !== !0 && (f = e, p(i[0], i[1]))
                }
                return this
            },
            remove: function() {
                if (n) {
                    var t = arguments,
                    r = 0,
                    i = t.length;
                    for (; r < i; r++) for (var s = 0; s < n.length; s++) if (t[r] === n[s]) {
                        a && s <= l && (l--, s <= c && c--),
                        n.splice(s--, 1);
                        if (e.unique) break
                    }
                }
                return this
            },
            has: function(e) {
                if (n) {
                    var t = 0,
                    r = n.length;
                    for (; t < r; t++) if (e === n[t]) return ! 0
                }
                return ! 1
            },
            empty: function() {
                return n = [],
                this
            },
            disable: function() {
                return n = r = i = t,
                this
            },
            disabled: function() {
                return ! n
            },
            lock: function() {
                return r = t,
                (!i || i === !0) && d.disable(),
                this
            },
            locked: function() {
                return ! r
            },
            fireWith: function(t, n) {
                return r && (a ? e.once || r.push([t, n]) : (!e.once || !i) && p(t, n)),
                this
            },
            fire: function() {
                return d.fireWith(this, arguments),
                this
            },
            fired: function() {
                return !! i
            }
        };
        return d
    };
    var a = [].slice;
    s.extend({
        Deferred: function(e) {
            var t = s.Callbacks("once memory"),
            n = s.Callbacks("once memory"),
            r = s.Callbacks("memory"),
            i = "pending",
            o = {
                resolve: t,
                reject: n,
                notify: r
            },
            u = {
                done: t.add,
                fail: n.add,
                progress: r.add,
                state: function() {
                    return i
                },
                isResolved: t.fired,
                isRejected: n.fired,
                then: function(e, t, n) {
                    return a.done(e).fail(t).progress(n),
                    this
                },
                always: function() {
                    return a.done.apply(a, arguments).fail.apply(a, arguments),
                    this
                },
                pipe: function(e, t, n) {
                    return s.Deferred(function(r) {
                        s.each({
                            done: [e, "resolve"],
                            fail: [t, "reject"],
                            progress: [n, "notify"]
                        },
                        function(e, t) {
                            var n = t[0],
                            i = t[1],
                            o;
                            s.isFunction(n) ? a[e](function() {
                                o = n.apply(this, arguments),
                                o && s.isFunction(o.promise) ? o.promise().then(r.resolve, r.reject, r.notify) : r[i + "With"](this === a ? r: this, [o])
                            }) : a[e](r[i])
                        })
                    }).promise()
                },
                promise: function(e) {
                    if (e == null) e = u;
                    else for (var t in u) e[t] = u[t];
                    return e
                }
            },
            a = u.promise({}),
            f;
            for (f in o) a[f] = o[f].fire,
            a[f + "With"] = o[f].fireWith;
            return a.done(function() {
                i = "resolved"
            },
            n.disable, r.lock).fail(function() {
                i = "rejected"
            },
            t.disable, r.lock),
            e && e.call(a, a),
            a
        },
        when: function(e) {
            function c(e) {
                return function(n) {
                    t[e] = arguments.length > 1 ? a.call(arguments, 0) : n,
                    --o || f.resolveWith(f, t)
                }
            }
            function h(e) {
                return function(t) {
                    i[e] = arguments.length > 1 ? a.call(arguments, 0) : t,
                    f.notifyWith(l, i)
                }
            }
            var t = a.call(arguments, 0),
            n = 0,
            r = t.length,
            i = new Array(r),
            o = r,
            u = r,
            f = r <= 1 && e && s.isFunction(e.promise) ? e: s.Deferred(),
            l = f.promise();
            if (r > 1) {
                for (; n < r; n++) t[n] && t[n].promise && s.isFunction(t[n].promise) ? t[n].promise().then(c(n), f.reject, h(n)) : --o;
                o || f.resolveWith(f, t)
            } else f !== e && f.resolveWith(f, r ? [e] : []);
            return l
        }
    }),
    s.support = function() {
        var t, r, i, o, u, a, f, l, c, h, p, d, v, m = n.createElement("div"),
        g = n.documentElement;
        m.setAttribute("className", "t"),
        m.innerHTML = "   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",
        r = m.getElementsByTagName("*"),
        i = m.getElementsByTagName("a")[0];
        if (!r || !r.length || !i) return {};
        o = n.createElement("select"),
        u = o.appendChild(n.createElement("option")),
        a = m.getElementsByTagName("input")[0],
        t = {
            leadingWhitespace: m.firstChild.nodeType === 3,
            tbody: !m.getElementsByTagName("tbody").length,
            htmlSerialize: !!m.getElementsByTagName("link").length,
            style: /top/.test(i.getAttribute("style")),
            hrefNormalized: i.getAttribute("href") === "/a",
            opacity: /^0.55/.test(i.style.opacity),
            cssFloat: !!i.style.cssFloat,
            checkOn: a.value === "on",
            optSelected: u.selected,
            getSetAttribute: m.className !== "t",
            enctype: !!n.createElement("form").enctype,
            html5Clone: n.createElement("nav").cloneNode(!0).outerHTML !== "<:nav></:nav>",
            submitBubbles: !0,
            changeBubbles: !0,
            focusinBubbles: !1,
            deleteExpando: !0,
            noCloneEvent: !0,
            inlineBlockNeedsLayout: !1,
            shrinkWrapBlocks: !1,
            reliableMarginRight: !0
        },
        a.checked = !0,
        t.noCloneChecked = a.cloneNode(!0).checked,
        o.disabled = !0,
        t.optDisabled = !u.disabled;
        try {
            delete m.test
        } catch(y) {
            t.deleteExpando = !1
        } ! m.addEventListener && m.attachEvent && m.fireEvent && (m.attachEvent("onclick",
        function() {
            t.noCloneEvent = !1
        }), m.cloneNode(!0).fireEvent("onclick")),
        a = n.createElement("input"),
        a.value = "t",
        a.setAttribute("type", "radio"),
        t.radioValue = a.value === "t",
        a.setAttribute("checked", "checked"),
        m.appendChild(a),
        l = n.createDocumentFragment(),
        l.appendChild(m.lastChild),
        t.checkClone = l.cloneNode(!0).cloneNode(!0).lastChild.checked,
        t.appendChecked = a.checked,
        l.removeChild(a),
        l.appendChild(m),
        m.innerHTML = "",
        e.getComputedStyle && (f = n.createElement("div"), f.style.width = "0", f.style.marginRight = "0", m.style.width = "2px", m.appendChild(f), t.reliableMarginRight = (parseInt((e.getComputedStyle(f, null) || {
            marginRight: 0
        }).marginRight, 10) || 0) === 0);
        if (m.attachEvent) for (d in {
            submit: 1,
            change: 1,
            focusin: 1
        }) p = "on" + d,
        v = p in m,
        v || (m.setAttribute(p, "return;"), v = typeof m[p] == "function"),
        t[d + "Bubbles"] = v;
        return l.removeChild(m),
        l = o = u = f = m = a = null,
        s(function() {
            var e, r, i, o, u, a, f, l, h, p, d, g = n.getElementsByTagName("body")[0];
            if (!g) return;
            f = 1,
            l = "position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",
            h = "visibility:hidden;border:0;",
            p = "style='" + l + "border:5px solid #000;padding:0;'",
            d = "<div " + p + "><div></div></div>" + "<table " + p + " cellpadding='0' cellspacing='0'>" + "<tr><td></td></tr></table>",
            e = n.createElement("div"),
            e.style.cssText = h + "width:0;height:0;position:static;top:0;margin-top:" + f + "px",
            g.insertBefore(e, g.firstChild),
            m = n.createElement("div"),
            e.appendChild(m),
            m.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",
            c = m.getElementsByTagName("td"),
            v = c[0].offsetHeight === 0,
            c[0].style.display = "",
            c[1].style.display = "none",
            t.reliableHiddenOffsets = v && c[0].offsetHeight === 0,
            m.innerHTML = "",
            m.style.width = m.style.paddingLeft = "1px",
            s.boxModel = t.boxModel = m.offsetWidth === 2,
            typeof m.style.zoom != "undefined" && (m.style.display = "inline", m.style.zoom = 1, t.inlineBlockNeedsLayout = m.offsetWidth === 2, m.style.display = "", m.innerHTML = "<div style='width:4px;'></div>", t.shrinkWrapBlocks = m.offsetWidth !== 2),
            m.style.cssText = l + h,
            m.innerHTML = d,
            r = m.firstChild,
            i = r.firstChild,
            u = r.nextSibling.firstChild.firstChild,
            a = {
                doesNotAddBorder: i.offsetTop !== 5,
                doesAddBorderForTableAndCells: u.offsetTop === 5
            },
            i.style.position = "fixed",
            i.style.top = "20px",
            a.fixedPosition = i.offsetTop === 20 || i.offsetTop === 15,
            i.style.position = i.style.top = "",
            r.style.overflow = "hidden",
            r.style.position = "relative",
            a.subtractsBorderForOverflowNotVisible = i.offsetTop === -5,
            a.doesNotIncludeMarginInBodyOffset = g.offsetTop !== f,
            g.removeChild(e),
            m = e = null,
            s.extend(t, a)
        }),
        t
    } ();
    var f = /^(?:\{.*\}|\[.*\])$/,
    l = /([A-Z])/g;
    s.extend({
        cache: {},
        uuid: 0,
        expando: "jQuery" + (s.fn.jquery + Math.random()).replace(/\D/g, ""),
        noData: {
            embed: !0,
            object: "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
            applet: !0
        },
        hasData: function(e) {
            return e = e.nodeType ? s.cache[e[s.expando]] : e[s.expando],
            !!e && !h(e)
        },
        data: function(e, n, r, i) {
            if (!s.acceptData(e)) return;
            var o, u, a, f = s.expando,
            l = typeof n == "string",
            c = e.nodeType,
            h = c ? s.cache: e,
            p = c ? e[f] : e[f] && f,
            d = n === "events";
            if ((!p || !h[p] || !d && !i && !h[p].data) && l && r === t) return;
            p || (c ? e[f] = p = ++s.uuid: p = f),
            h[p] || (h[p] = {},
            c || (h[p].toJSON = s.noop));
            if (typeof n == "object" || typeof n == "function") i ? h[p] = s.extend(h[p], n) : h[p].data = s.extend(h[p].data, n);
            return o = u = h[p],
            i || (u.data || (u.data = {}), u = u.data),
            r !== t && (u[s.camelCase(n)] = r),
            d && !u[n] ? o.events: (l ? (a = u[n], a == null && (a = u[s.camelCase(n)])) : a = u, a)
        },
        removeData: function(e, t, n) {
            if (!s.acceptData(e)) return;
            var r, i, o, u = s.expando,
            a = e.nodeType,
            f = a ? s.cache: e,
            l = a ? e[u] : u;
            if (!f[l]) return;
            if (t) {
                r = n ? f[l] : f[l].data;
                if (r) {
                    s.isArray(t) || (t in r ? t = [t] : (t = s.camelCase(t), t in r ? t = [t] : t = t.split(" ")));
                    for (i = 0, o = t.length; i < o; i++) delete r[t[i]];
                    if (! (n ? h: s.isEmptyObject)(r)) return
                }
            }
            if (!n) {
                delete f[l].data;
                if (!h(f[l])) return
            }
            s.support.deleteExpando || !f.setInterval ? delete f[l] : f[l] = null,
            a && (s.support.deleteExpando ? delete e[u] : e.removeAttribute ? e.removeAttribute(u) : e[u] = null)
        },
        _data: function(e, t, n) {
            return s.data(e, t, n, !0)
        },
        acceptData: function(e) {
            if (e.nodeName) {
                var t = s.noData[e.nodeName.toLowerCase()];
                if (t) return t !== !0 && e.getAttribute("classid") === t
            }
            return ! 0
        }
    }),
    s.fn.extend({
        data: function(e, n) {
            var r, i, o, u = null;
            if (typeof e == "undefined") {
                if (this.length) {
                    u = s.data(this[0]);
                    if (this[0].nodeType === 1 && !s._data(this[0], "parsedAttrs")) {
                        i = this[0].attributes;
                        for (var a = 0,
                        f = i.length; a < f; a++) o = i[a].name,
                        o.indexOf("data-") === 0 && (o = s.camelCase(o.substring(5)), c(this[0], o, u[o]));
                        s._data(this[0], "parsedAttrs", !0)
                    }
                }
                return u
            }
            return typeof e == "object" ? this.each(function() {
                s.data(this, e)
            }) : (r = e.split("."), r[1] = r[1] ? "." + r[1] : "", n === t ? (u = this.triggerHandler("getData" + r[1] + "!", [r[0]]), u === t && this.length && (u = s.data(this[0], e), u = c(this[0], e, u)), u === t && r[1] ? this.data(r[0]) : u) : this.each(function() {
                var t = s(this),
                i = [r[0], n];
                t.triggerHandler("setData" + r[1] + "!", i),
                s.data(this, e, n),
                t.triggerHandler("changeData" + r[1] + "!", i)
            }))
        },
        removeData: function(e) {
            return this.each(function() {
                s.removeData(this, e)
            })
        }
    }),
    s.extend({
        _mark: function(e, t) {
            e && (t = (t || "fx") + "mark", s._data(e, t, (s._data(e, t) || 0) + 1))
        },
        _unmark: function(e, t, n) {
            e !== !0 && (n = t, t = e, e = !1);
            if (t) {
                n = n || "fx";
                var r = n + "mark",
                i = e ? 0 : (s._data(t, r) || 1) - 1;
                i ? s._data(t, r, i) : (s.removeData(t, r, !0), p(t, n, "mark"))
            }
        },
        queue: function(e, t, n) {
            var r;
            if (e) return t = (t || "fx") + "queue",
            r = s._data(e, t),
            n && (!r || s.isArray(n) ? r = s._data(e, t, s.makeArray(n)) : r.push(n)),
            r || []
        },
        dequeue: function(e, t) {
            t = t || "fx";
            var n = s.queue(e, t),
            r = n.shift(),
            i = {};
            r === "inprogress" && (r = n.shift()),
            r && (t === "fx" && n.unshift("inprogress"), s._data(e, t + ".run", i), r.call(e,
            function() {
                s.dequeue(e, t)
            },
            i)),
            n.length || (s.removeData(e, t + "queue " + t + ".run", !0), p(e, t, "queue"))
        }
    }),
    s.fn.extend({
        queue: function(e, n) {
            return typeof e != "string" && (n = e, e = "fx"),
            n === t ? s.queue(this[0], e) : this.each(function() {
                var t = s.queue(this, e, n);
                e === "fx" && t[0] !== "inprogress" && s.dequeue(this, e)
            })
        },
        dequeue: function(e) {
            return this.each(function() {
                s.dequeue(this, e)
            })
        },
        delay: function(e, t) {
            return e = s.fx ? s.fx.speeds[e] || e: e,
            t = t || "fx",
            this.queue(t,
            function(t, n) {
                var r = setTimeout(t, e);
                n.stop = function() {
                    clearTimeout(r)
                }
            })
        },
        clearQueue: function(e) {
            return this.queue(e || "fx", [])
        },
        promise: function(e, n) {
            function h() {--u || r.resolveWith(i, [i])
            }
            typeof e != "string" && (n = e, e = t),
            e = e || "fx";
            var r = s.Deferred(),
            i = this,
            o = i.length,
            u = 1,
            a = e + "defer",
            f = e + "queue",
            l = e + "mark",
            c;
            while (o--) if (c = s.data(i[o], a, t, !0) || (s.data(i[o], f, t, !0) || s.data(i[o], l, t, !0)) && s.data(i[o], a, s.Callbacks("once memory"), !0)) u++,
            c.add(h);
            return h(),
            r.promise()
        }
    });
    var d = /[\n\t\r]/g,
    v = /\s+/,
    m = /\r/g,
    g = /^(?:button|input)$/i,
    y = /^(?:button|input|object|select|textarea)$/i,
    b = /^a(?:rea)?$/i,
    w = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
    E = s.support.getSetAttribute,
    S, x, T;
    s.fn.extend({
        attr: function(e, t) {
            return s.access(this, e, t, !0, s.attr)
        },
        removeAttr: function(e) {
            return this.each(function() {
                s.removeAttr(this, e)
            })
        },
        prop: function(e, t) {
            return s.access(this, e, t, !0, s.prop)
        },
        removeProp: function(e) {
            return e = s.propFix[e] || e,
            this.each(function() {
                try {
                    this[e] = t,
                    delete this[e]
                } catch(n) {}
            })
        },
        addClass: function(e) {
            var t, n, r, i, o, u, a;
            if (s.isFunction(e)) return this.each(function(t) {
                s(this).addClass(e.call(this, t, this.className))
            });
            if (e && typeof e == "string") {
                t = e.split(v);
                for (n = 0, r = this.length; n < r; n++) {
                    i = this[n];
                    if (i.nodeType === 1) if (!i.className && t.length === 1) i.className = e;
                    else {
                        o = " " + i.className + " ";
                        for (u = 0, a = t.length; u < a; u++)~o.indexOf(" " + t[u] + " ") || (o += t[u] + " ");
                        i.className = s.trim(o)
                    }
                }
            }
            return this
        },
        removeClass: function(e) {
            var n, r, i, o, u, a, f;
            if (s.isFunction(e)) return this.each(function(t) {
                s(this).removeClass(e.call(this, t, this.className))
            });
            if (e && typeof e == "string" || e === t) {
                n = (e || "").split(v);
                for (r = 0, i = this.length; r < i; r++) {
                    o = this[r];
                    if (o.nodeType === 1 && o.className) if (e) {
                        u = (" " + o.className + " ").replace(d, " ");
                        for (a = 0, f = n.length; a < f; a++) u = u.replace(" " + n[a] + " ", " ");
                        o.className = s.trim(u)
                    } else o.className = ""
                }
            }
            return this
        },
        toggleClass: function(e, t) {
            var n = typeof e,
            r = typeof t == "boolean";
            return s.isFunction(e) ? this.each(function(n) {
                s(this).toggleClass(e.call(this, n, this.className, t), t)
            }) : this.each(function() {
                if (n === "string") {
                    var i, o = 0,
                    u = s(this),
                    a = t,
                    f = e.split(v);
                    while (i = f[o++]) a = r ? a: !u.hasClass(i),
                    u[a ? "addClass": "removeClass"](i)
                } else if (n === "undefined" || n === "boolean") this.className && s._data(this, "__className__", this.className),
                this.className = this.className || e === !1 ? "": s._data(this, "__className__") || ""
            })
        },
        hasClass: function(e) {
            var t = " " + e + " ",
            n = 0,
            r = this.length;
            for (; n < r; n++) if (this[n].nodeType === 1 && (" " + this[n].className + " ").replace(d, " ").indexOf(t) > -1) return ! 0;
            return ! 1
        },
        val: function(e) {
            var n, r, i, o = this[0];
            if (!arguments.length) {
                if (o) return n = s.valHooks[o.nodeName.toLowerCase()] || s.valHooks[o.type],
                n && "get" in n && (r = n.get(o, "value")) !== t ? r: (r = o.value, typeof r == "string" ? r.replace(m, "") : r == null ? "": r);
                return
            }
            return i = s.isFunction(e),
            this.each(function(r) {
                var o = s(this),
                u;
                if (this.nodeType !== 1) return;
                i ? u = e.call(this, r, o.val()) : u = e,
                u == null ? u = "": typeof u == "number" ? u += "": s.isArray(u) && (u = s.map(u,
                function(e) {
                    return e == null ? "": e + ""
                })),
                n = s.valHooks[this.nodeName.toLowerCase()] || s.valHooks[this.type];
                if (!n || !("set" in n) || n.set(this, u, "value") === t) this.value = u
            })
        }
    }),
    s.extend({
        valHooks: {
            option: {
                get: function(e) {
                    var t = e.attributes.value;
                    return ! t || t.specified ? e.value: e.text
                }
            },
            select: {
                get: function(e) {
                    var t, n, r, i, o = e.selectedIndex,
                    u = [],
                    a = e.options,
                    f = e.type === "select-one";
                    if (o < 0) return null;
                    n = f ? o: 0,
                    r = f ? o + 1 : a.length;
                    for (; n < r; n++) {
                        i = a[n];
                        if (i.selected && (s.support.optDisabled ? !i.disabled: i.getAttribute("disabled") === null) && (!i.parentNode.disabled || !s.nodeName(i.parentNode, "optgroup"))) {
                            t = s(i).val();
                            if (f) return t;
                            u.push(t)
                        }
                    }
                    return f && !u.length && a.length ? s(a[o]).val() : u
                },
                set: function(e, t) {
                    var n = s.makeArray(t);
                    return s(e).find("option").each(function() {
                        this.selected = s.inArray(s(this).val(), n) >= 0
                    }),
                    n.length || (e.selectedIndex = -1),
                    n
                }
            }
        },
        attrFn: {
            val: !0,
            css: !0,
            html: !0,
            text: !0,
            data: !0,
            width: !0,
            height: !0,
            offset: !0
        },
        attr: function(e, n, r, i) {
            var o, u, a, f = e.nodeType;
            if (!e || f === 3 || f === 8 || f === 2) return;
            if (i && n in s.attrFn) return s(e)[n](r);
            if (typeof e.getAttribute == "undefined") return s.prop(e, n, r);
            a = f !== 1 || !s.isXMLDoc(e),
            a && (n = n.toLowerCase(), u = s.attrHooks[n] || (w.test(n) ? x: S));
            if (r !== t) {
                if (r === null) {
                    s.removeAttr(e, n);
                    return
                }
                return u && "set" in u && a && (o = u.set(e, r, n)) !== t ? o: (e.setAttribute(n, "" + r), r)
            }
            return u && "get" in u && a && (o = u.get(e, n)) !== null ? o: (o = e.getAttribute(n), o === null ? t: o)
        },
        removeAttr: function(e, t) {
            var n, r, i, o, u = 0;
            if (t && e.nodeType === 1) {
                r = t.toLowerCase().split(v),
                o = r.length;
                for (; u < o; u++) i = r[u],
                i && (n = s.propFix[i] || i, s.attr(e, i, ""), e.removeAttribute(E ? i: n), w.test(i) && n in e && (e[n] = !1))
            }
        },
        attrHooks: {
            type: {
                set: function(e, t) {
                    if (g.test(e.nodeName) && e.parentNode) s.error("type property can't be changed");
                    else if (!s.support.radioValue && t === "radio" && s.nodeName(e, "input")) {
                        var n = e.value;
                        return e.setAttribute("type", t),
                        n && (e.value = n),
                        t
                    }
                }
            },
            value: {
                get: function(e, t) {
                    return S && s.nodeName(e, "button") ? S.get(e, t) : t in e ? e.value: null
                },
                set: function(e, t, n) {
                    if (S && s.nodeName(e, "button")) return S.set(e, t, n);
                    e.value = t
                }
            }
        },
        propFix: {
            tabindex: "tabIndex",
            readonly: "readOnly",
            "for": "htmlFor",
            "class": "className",
            maxlength: "maxLength",
            cellspacing: "cellSpacing",
            cellpadding: "cellPadding",
            rowspan: "rowSpan",
            colspan: "colSpan",
            usemap: "useMap",
            frameborder: "frameBorder",
            contenteditable: "contentEditable"
        },
        prop: function(e, n, r) {
            var i, o, u, a = e.nodeType;
            if (!e || a === 3 || a === 8 || a === 2) return;
            return u = a !== 1 || !s.isXMLDoc(e),
            u && (n = s.propFix[n] || n, o = s.propHooks[n]),
            r !== t ? o && "set" in o && (i = o.set(e, r, n)) !== t ? i: e[n] = r: o && "get" in o && (i = o.get(e, n)) !== null ? i: e[n]
        },
        propHooks: {
            tabIndex: {
                get: function(e) {
                    var n = e.getAttributeNode("tabindex");
                    return n && n.specified ? parseInt(n.value, 10) : y.test(e.nodeName) || b.test(e.nodeName) && e.href ? 0 : t
                }
            }
        }
    }),
    s.attrHooks.tabindex = s.propHooks.tabIndex,
    x = {
        get: function(e, n) {
            var r, i = s.prop(e, n);
            return i === !0 || typeof i != "boolean" && (r = e.getAttributeNode(n)) && r.nodeValue !== !1 ? n.toLowerCase() : t
        },
        set: function(e, t, n) {
            var r;
            return t === !1 ? s.removeAttr(e, n) : (r = s.propFix[n] || n, r in e && (e[r] = !0), e.setAttribute(n, n.toLowerCase())),
            n
        }
    },
    E || (T = {
        name: !0,
        id: !0
    },
    S = s.valHooks.button = {
        get: function(e, n) {
            var r;
            return r = e.getAttributeNode(n),
            r && (T[n] ? r.nodeValue !== "": r.specified) ? r.nodeValue: t
        },
        set: function(e, t, r) {
            var i = e.getAttributeNode(r);
            return i || (i = n.createAttribute(r), e.setAttributeNode(i)),
            i.nodeValue = t + ""
        }
    },
    s.attrHooks.tabindex.set = S.set, s.each(["width", "height"],
    function(e, t) {
        s.attrHooks[t] = s.extend(s.attrHooks[t], {
            set: function(e, n) {
                if (n === "") return e.setAttribute(t, "auto"),
                n
            }
        })
    }), s.attrHooks.contenteditable = {
        get: S.get,
        set: function(e, t, n) {
            t === "" && (t = "false"),
            S.set(e, t, n)
        }
    }),
    s.support.hrefNormalized || s.each(["href", "src", "width", "height"],
    function(e, n) {
        s.attrHooks[n] = s.extend(s.attrHooks[n], {
            get: function(e) {
                var r = e.getAttribute(n, 2);
                return r === null ? t: r
            }
        })
    }),
    s.support.style || (s.attrHooks.style = {
        get: function(e) {
            return e.style.cssText.toLowerCase() || t
        },
        set: function(e, t) {
            return e.style.cssText = "" + t
        }
    }),
    s.support.optSelected || (s.propHooks.selected = s.extend(s.propHooks.selected, {
        get: function(e) {
            var t = e.parentNode;
            return t && (t.selectedIndex, t.parentNode && t.parentNode.selectedIndex),
            null
        }
    })),
    s.support.enctype || (s.propFix.enctype = "encoding"),
    s.support.checkOn || s.each(["radio", "checkbox"],
    function() {
        s.valHooks[this] = {
            get: function(e) {
                return e.getAttribute("value") === null ? "on": e.value
            }
        }
    }),
    s.each(["radio", "checkbox"],
    function() {
        s.valHooks[this] = s.extend(s.valHooks[this], {
            set: function(e, t) {
                if (s.isArray(t)) return e.checked = s.inArray(s(e).val(), t) >= 0
            }
        })
    });
    var N = /^(?:textarea|input|select)$/i,
    C = /^([^\.]*)?(?:\.(.+))?$/,
    k = /\bhover(\.\S+)?\b/,
    L = /^key/,
    A = /^(?:mouse|contextmenu)|click/,
    O = /^(?:focusinfocus|focusoutblur)$/,
    M = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,
    _ = function(e) {
        var t = M.exec(e);
        return t && (t[1] = (t[1] || "").toLowerCase(), t[3] = t[3] && new RegExp("(?:^|\\s)" + t[3] + "(?:\\s|$)")),
        t
    },
    D = function(e, t) {
        var n = e.attributes || {};
        return (!t[1] || e.nodeName.toLowerCase() === t[1]) && (!t[2] || (n.id || {}).value === t[2]) && (!t[3] || t[3].test((n["class"] || {}).value))
    },
    P = function(e) {
        return s.event.special.hover ? e: e.replace(k, "mouseenter$1 mouseleave$1")
    };
    s.event = {
        add: function(e, n, r, i, o) {
            var u, a, f, l, c, h, p, d, v, m, g, y;
            if (e.nodeType === 3 || e.nodeType === 8 || !n || !r || !(u = s._data(e))) return;
            r.handler && (v = r, r = v.handler),
            r.guid || (r.guid = s.guid++),
            f = u.events,
            f || (u.events = f = {}),
            a = u.handle,
            a || (u.handle = a = function(e) {
                return typeof s == "undefined" || !!e && s.event.triggered === e.type ? t: s.event.dispatch.apply(a.elem, arguments)
            },
            a.elem = e),
            n = s.trim(P(n)).split(" ");
            for (l = 0; l < n.length; l++) {
                c = C.exec(n[l]) || [],
                h = c[1],
                p = (c[2] || "").split(".").sort(),
                y = s.event.special[h] || {},
                h = (o ? y.delegateType: y.bindType) || h,
                y = s.event.special[h] || {},
                d = s.extend({
                    type: h,
                    origType: c[1],
                    data: i,
                    handler: r,
                    guid: r.guid,
                    selector: o,
                    quick: _(o),
                    namespace: p.join(".")
                },
                v),
                g = f[h];
                if (!g) {
                    g = f[h] = [],
                    g.delegateCount = 0;
                    if (!y.setup || y.setup.call(e, i, p, a) === !1) e.addEventListener ? e.addEventListener(h, a, !1) : e.attachEvent && e.attachEvent("on" + h, a)
                }
                y.add && (y.add.call(e, d), d.handler.guid || (d.handler.guid = r.guid)),
                o ? g.splice(g.delegateCount++, 0, d) : g.push(d),
                s.event.global[h] = !0
            }
            e = null
        },
        global: {},
        remove: function(e, t, n, r, i) {
            var o = s.hasData(e) && s._data(e),
            u,
            a,
            f,
            l,
            c,
            h,
            p,
            d,
            v,
            m,
            g,
            y;
            if (!o || !(d = o.events)) return;
            t = s.trim(P(t || "")).split(" ");
            for (u = 0; u < t.length; u++) {
                a = C.exec(t[u]) || [],
                f = l = a[1],
                c = a[2];
                if (!f) {
                    for (f in d) s.event.remove(e, f + t[u], n, r, !0);
                    continue
                }
                v = s.event.special[f] || {},
                f = (r ? v.delegateType: v.bindType) || f,
                g = d[f] || [],
                h = g.length,
                c = c ? new RegExp("(^|\\.)" + c.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
                for (p = 0; p < g.length; p++) y = g[p],
                (i || l === y.origType) && (!n || n.guid === y.guid) && (!c || c.test(y.namespace)) && (!r || r === y.selector || r === "**" && y.selector) && (g.splice(p--, 1), y.selector && g.delegateCount--, v.remove && v.remove.call(e, y));
                g.length === 0 && h !== g.length && ((!v.teardown || v.teardown.call(e, c) === !1) && s.removeEvent(e, f, o.handle), delete d[f])
            }
            s.isEmptyObject(d) && (m = o.handle, m && (m.elem = null), s.removeData(e, ["events", "handle"], !0))
        },
        customEvent: {
            getData: !0,
            setData: !0,
            changeData: !0
        },
        trigger: function(n, r, i, o) {
            if (!i || i.nodeType !== 3 && i.nodeType !== 8) {
                var u = n.type || n,
                a = [],
                f,
                l,
                c,
                h,
                p,
                d,
                v,
                m,
                g,
                y;
                if (O.test(u + s.event.triggered)) return;
                u.indexOf("!") >= 0 && (u = u.slice(0, -1), l = !0),
                u.indexOf(".") >= 0 && (a = u.split("."), u = a.shift(), a.sort());
                if ((!i || s.event.customEvent[u]) && !s.event.global[u]) return;
                n = typeof n == "object" ? n[s.expando] ? n: new s.Event(u, n) : new s.Event(u),
                n.type = u,
                n.isTrigger = !0,
                n.exclusive = l,
                n.namespace = a.join("."),
                n.namespace_re = n.namespace ? new RegExp("(^|\\.)" + a.join("\\.(?:.*\\.)?") + "(\\.|$)") : null,
                d = u.indexOf(":") < 0 ? "on" + u: "";
                if (!i) {
                    f = s.cache;
                    for (c in f) f[c].events && f[c].events[u] && s.event.trigger(n, r, f[c].handle.elem, !0);
                    return
                }
                n.result = t,
                n.target || (n.target = i),
                r = r != null ? s.makeArray(r) : [],
                r.unshift(n),
                v = s.event.special[u] || {};
                if (v.trigger && v.trigger.apply(i, r) === !1) return;
                g = [[i, v.bindType || u]];
                if (!o && !v.noBubble && !s.isWindow(i)) {
                    y = v.delegateType || u,
                    h = O.test(y + u) ? i: i.parentNode,
                    p = null;
                    for (; h; h = h.parentNode) g.push([h, y]),
                    p = h;
                    p && p === i.ownerDocument && g.push([p.defaultView || p.parentWindow || e, y])
                }
                for (c = 0; c < g.length && !n.isPropagationStopped(); c++) h = g[c][0],
                n.type = g[c][1],
                m = (s._data(h, "events") || {})[n.type] && s._data(h, "handle"),
                m && m.apply(h, r),
                m = d && h[d],
                m && s.acceptData(h) && m.apply(h, r) === !1 && n.preventDefault();
                return n.type = u,
                !o && !n.isDefaultPrevented() && (!v._default || v._default.apply(i.ownerDocument, r) === !1) && (u !== "click" || !s.nodeName(i, "a")) && s.acceptData(i) && d && i[u] && (u !== "focus" && u !== "blur" || n.target.offsetWidth !== 0) && !s.isWindow(i) && (p = i[d], p && (i[d] = null), s.event.triggered = u, i[u](), s.event.triggered = t, p && (i[d] = p)),
                n.result
            }
            return
        },
        dispatch: function(n) {
            n = s.event.fix(n || e.event);
            var r = (s._data(this, "events") || {})[n.type] || [],
            i = r.delegateCount,
            o = [].slice.call(arguments, 0),
            u = !n.exclusive && !n.namespace,
            a = [],
            f,
            l,
            c,
            h,
            p,
            d,
            v,
            m,
            g,
            y,
            b;
            o[0] = n,
            n.delegateTarget = this;
            if (i && !n.target.disabled && (!n.button || n.type !== "click")) {
                h = s(this),
                h.context = this.ownerDocument || this;
                for (c = n.target; c != this; c = c.parentNode || this) {
                    d = {},
                    m = [],
                    h[0] = c;
                    for (f = 0; f < i; f++) g = r[f],
                    y = g.selector,
                    d[y] === t && (d[y] = g.quick ? D(c, g.quick) : h.is(y)),
                    d[y] && m.push(g);
                    m.length && a.push({
                        elem: c,
                        matches: m
                    })
                }
            }
            r.length > i && a.push({
                elem: this,
                matches: r.slice(i)
            });
            for (f = 0; f < a.length && !n.isPropagationStopped(); f++) {
                v = a[f],
                n.currentTarget = v.elem;
                for (l = 0; l < v.matches.length && !n.isImmediatePropagationStopped(); l++) {
                    g = v.matches[l];
                    if (u || !n.namespace && !g.namespace || n.namespace_re && n.namespace_re.test(g.namespace)) n.data = g.data,
                    n.handleObj = g,
                    p = ((s.event.special[g.origType] || {}).handle || g.handler).apply(v.elem, o),
                    p !== t && (n.result = p, p === !1 && (n.preventDefault(), n.stopPropagation()))
                }
            }
            return n.result
        },
        props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
        fixHooks: {},
        keyHooks: {
            props: "char charCode key keyCode".split(" "),
            filter: function(e, t) {
                return e.which == null && (e.which = t.charCode != null ? t.charCode: t.keyCode),
                e
            }
        },
        mouseHooks: {
            props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
            filter: function(e, r) {
                var i, s, o, u = r.button,
                a = r.fromElement;
                return e.pageX == null && r.clientX != null && (i = e.target.ownerDocument || n, s = i.documentElement, o = i.body, e.pageX = r.clientX + (s && s.scrollLeft || o && o.scrollLeft || 0) - (s && s.clientLeft || o && o.clientLeft || 0), e.pageY = r.clientY + (s && s.scrollTop || o && o.scrollTop || 0) - (s && s.clientTop || o && o.clientTop || 0)),
                !e.relatedTarget && a && (e.relatedTarget = a === e.target ? r.toElement: a),
                !e.which && u !== t && (e.which = u & 1 ? 1 : u & 2 ? 3 : u & 4 ? 2 : 0),
                e
            }
        },
        fix: function(e) {
            if (e[s.expando]) return e;
            var r, i, o = e,
            u = s.event.fixHooks[e.type] || {},
            a = u.props ? this.props.concat(u.props) : this.props;
            e = s.Event(o);
            for (r = a.length; r;) i = a[--r],
            e[i] = o[i];
            return e.target || (e.target = o.srcElement || n),
            e.target.nodeType === 3 && (e.target = e.target.parentNode),
            e.metaKey === t && (e.metaKey = e.ctrlKey),
            u.filter ? u.filter(e, o) : e
        },
        special: {
            ready: {
                setup: s.bindReady
            },
            load: {
                noBubble: !0
            },
            focus: {
                delegateType: "focusin"
            },
            blur: {
                delegateType: "focusout"
            },
            beforeunload: {
                setup: function(e, t, n) {
                    s.isWindow(this) && (this.onbeforeunload = n)
                },
                teardown: function(e, t) {
                    this.onbeforeunload === t && (this.onbeforeunload = null)
                }
            }
        },
        simulate: function(e, t, n, r) {
            var i = s.extend(new s.Event, n, {
                type: e,
                isSimulated: !0,
                originalEvent: {}
            });
            r ? s.event.trigger(i, null, t) : s.event.dispatch.call(t, i),
            i.isDefaultPrevented() && n.preventDefault()
        }
    },
    s.event.handle = s.event.dispatch,
    s.removeEvent = n.removeEventListener ?
    function(e, t, n) {
        e.removeEventListener && e.removeEventListener(t, n, !1)
    }: function(e, t, n) {
        e.detachEvent && e.detachEvent("on" + t, n)
    },
    s.Event = function(e, t) {
        if (! (this instanceof s.Event)) return new s.Event(e, t);
        e && e.type ? (this.originalEvent = e, this.type = e.type, this.isDefaultPrevented = e.defaultPrevented || e.returnValue === !1 || e.getPreventDefault && e.getPreventDefault() ? B: H) : this.type = e,
        t && s.extend(this, t),
        this.timeStamp = e && e.timeStamp || s.now(),
        this[s.expando] = !0
    },
    s.Event.prototype = {
        preventDefault: function() {
            this.isDefaultPrevented = B;
            var e = this.originalEvent;
            if (!e) return;
            e.preventDefault ? e.preventDefault() : e.returnValue = !1
        },
        stopPropagation: function() {
            this.isPropagationStopped = B;
            var e = this.originalEvent;
            if (!e) return;
            e.stopPropagation && e.stopPropagation(),
            e.cancelBubble = !0
        },
        stopImmediatePropagation: function() {
            this.isImmediatePropagationStopped = B,
            this.stopPropagation()
        },
        isDefaultPrevented: H,
        isPropagationStopped: H,
        isImmediatePropagationStopped: H
    },
    s.each({
        mouseenter: "mouseover",
        mouseleave: "mouseout"
    },
    function(e, t) {
        s.event.special[e] = {
            delegateType: t,
            bindType: t,
            handle: function(e) {
                var n = this,
                r = e.relatedTarget,
                i = e.handleObj,
                o = i.selector,
                u;
                if (!r || r !== n && !s.contains(n, r)) e.type = i.origType,
                u = i.handler.apply(this, arguments),
                e.type = t;
                return u
            }
        }
    }),
    s.support.submitBubbles || (s.event.special.submit = {
        setup: function() {
            if (s.nodeName(this, "form")) return ! 1;
            s.event.add(this, "click._submit keypress._submit",
            function(e) {
                var n = e.target,
                r = s.nodeName(n, "input") || s.nodeName(n, "button") ? n.form: t;
                r && !r._submit_attached && (s.event.add(r, "submit._submit",
                function(e) {
                    this.parentNode && !e.isTrigger && s.event.simulate("submit", this.parentNode, e, !0)
                }), r._submit_attached = !0)
            })
        },
        teardown: function() {
            if (s.nodeName(this, "form")) return ! 1;
            s.event.remove(this, "._submit")
        }
    }),
    s.support.changeBubbles || (s.event.special.change = {
        setup: function() {
            if (N.test(this.nodeName)) {
                if (this.type === "checkbox" || this.type === "radio") s.event.add(this, "propertychange._change",
                function(e) {
                    e.originalEvent.propertyName === "checked" && (this._just_changed = !0)
                }),
                s.event.add(this, "click._change",
                function(e) {
                    this._just_changed && !e.isTrigger && (this._just_changed = !1, s.event.simulate("change", this, e, !0))
                });
                return ! 1
            }
            s.event.add(this, "beforeactivate._change",
            function(e) {
                var t = e.target;
                N.test(t.nodeName) && !t._change_attached && (s.event.add(t, "change._change",
                function(e) {
                    this.parentNode && !e.isSimulated && !e.isTrigger && s.event.simulate("change", this.parentNode, e, !0)
                }), t._change_attached = !0)
            })
        },
        handle: function(e) {
            var t = e.target;
            if (this !== t || e.isSimulated || e.isTrigger || t.type !== "radio" && t.type !== "checkbox") return e.handleObj.handler.apply(this, arguments)
        },
        teardown: function() {
            return s.event.remove(this, "._change"),
            N.test(this.nodeName)
        }
    }),
    s.support.focusinBubbles || s.each({
        focus: "focusin",
        blur: "focusout"
    },
    function(e, t) {
        var r = 0,
        i = function(e) {
            s.event.simulate(t, e.target, s.event.fix(e), !0)
        };
        s.event.special[t] = {
            setup: function() {
                r++===0 && n.addEventListener(e, i, !0)
            },
            teardown: function() {--r === 0 && n.removeEventListener(e, i, !0)
            }
        }
    }),
    s.fn.extend({
        on: function(e, n, r, i, o) {
            var u, a;
            if (typeof e == "object") {
                typeof n != "string" && (r = n, n = t);
                for (a in e) this.on(a, n, r, e[a], o);
                return this
            }
            r == null && i == null ? (i = n, r = n = t) : i == null && (typeof n == "string" ? (i = r, r = t) : (i = r, r = n, n = t));
            if (i === !1) i = H;
            else if (!i) return this;
            return o === 1 && (u = i, i = function(e) {
                return s().off(e),
                u.apply(this, arguments)
            },
            i.guid = u.guid || (u.guid = s.guid++)),
            this.each(function() {
                s.event.add(this, e, i, r, n)
            })
        },
        one: function(e, t, n, r) {
            return this.on.call(this, e, t, n, r, 1)
        },
        off: function(e, n, r) {
            if (e && e.preventDefault && e.handleObj) {
                var i = e.handleObj;
                return s(e.delegateTarget).off(i.namespace ? i.type + "." + i.namespace: i.type, i.selector, i.handler),
                this
            }
            if (typeof e == "object") {
                for (var o in e) this.off(o, n, e[o]);
                return this
            }
            if (n === !1 || typeof n == "function") r = n,
            n = t;
            return r === !1 && (r = H),
            this.each(function() {
                s.event.remove(this, e, r, n)
            })
        },
        bind: function(e, t, n) {
            return this.on(e, null, t, n)
        },
        unbind: function(e, t) {
            return this.off(e, null, t)
        },
        live: function(e, t, n) {
            return s(this.context).on(e, this.selector, t, n),
            this
        },
        die: function(e, t) {
            return s(this.context).off(e, this.selector || "**", t),
            this
        },
        delegate: function(e, t, n, r) {
            return this.on(t, e, n, r)
        },
        undelegate: function(e, t, n) {
            return arguments.length == 1 ? this.off(e, "**") : this.off(t, e, n)
        },
        trigger: function(e, t) {
            return this.each(function() {
                s.event.trigger(e, t, this)
            })
        },
        triggerHandler: function(e, t) {
            if (this[0]) return s.event.trigger(e, t, this[0], !0)
        },
        toggle: function(e) {
            var t = arguments,
            n = e.guid || s.guid++,
            r = 0,
            i = function(n) {
                var i = (s._data(this, "lastToggle" + e.guid) || 0) % r;
                return s._data(this, "lastToggle" + e.guid, i + 1),
                n.preventDefault(),
                t[i].apply(this, arguments) || !1
            };
            i.guid = n;
            while (r < t.length) t[r++].guid = n;
            return this.click(i)
        },
        hover: function(e, t) {
            return this.mouseenter(e).mouseleave(t || e)
        }
    }),
    s.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),
    function(e, t) {
        s.fn[t] = function(e, n) {
            return n == null && (n = e, e = null),
            arguments.length > 0 ? this.on(t, null, e, n) : this.trigger(t)
        },
        s.attrFn && (s.attrFn[t] = !0),
        L.test(t) && (s.event.fixHooks[t] = s.event.keyHooks),
        A.test(t) && (s.event.fixHooks[t] = s.event.mouseHooks)
    }),
    function() {
        function S(e, t, n, i, s, o) {
            for (var u = 0,
            a = i.length; u < a; u++) {
                var f = i[u];
                if (f) {
                    var l = !1;
                    f = f[e];
                    while (f) {
                        if (f[r] === n) {
                            l = i[f.sizset];
                            break
                        }
                        f.nodeType === 1 && !o && (f[r] = n, f.sizset = u);
                        if (f.nodeName.toLowerCase() === t) {
                            l = f;
                            break
                        }
                        f = f[e]
                    }
                    i[u] = l
                }
            }
        }
        function x(e, t, n, i, s, o) {
            for (var u = 0,
            a = i.length; u < a; u++) {
                var f = i[u];
                if (f) {
                    var l = !1;
                    f = f[e];
                    while (f) {
                        if (f[r] === n) {
                            l = i[f.sizset];
                            break
                        }
                        if (f.nodeType === 1) {
                            o || (f[r] = n, f.sizset = u);
                            if (typeof t != "string") {
                                if (f === t) {
                                    l = !0;
                                    break
                                }
                            } else if (h.filter(t, [f]).length > 0) {
                                l = f;
                                break
                            }
                        }
                        f = f[e]
                    }
                    i[u] = l
                }
            }
        }
        var e = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
        r = "sizcache" + (Math.random() + "").replace(".", ""),
        i = 0,
        o = Object.prototype.toString,
        u = !1,
        a = !0,
        f = /\\/g,
        l = /\r\n/g,
        c = /\W/; [0, 0].sort(function() {
            return a = !1,
            0
        });
        var h = function(t, r, i, s) {
            i = i || [],
            r = r || n;
            var u = r;
            if (r.nodeType !== 1 && r.nodeType !== 9) return [];
            if (!t || typeof t != "string") return i;
            var a, f, l, c, p, m, g, b, w = !0,
            E = h.isXML(r),
            S = [],
            x = t;
            do {
                e.exec(""), a = e.exec(x);
                if (a) {
                    x = a[3],
                    S.push(a[1]);
                    if (a[2]) {
                        c = a[3];
                        break
                    }
                }
            } while ( a );
            if (S.length > 1 && v.exec(t)) if (S.length === 2 && d.relative[S[0]]) f = T(S[0] + S[1], r, s);
            else {
                f = d.relative[S[0]] ? [r] : h(S.shift(), r);
                while (S.length) t = S.shift(),
                d.relative[t] && (t += S.shift()),
                f = T(t, f, s)
            } else { ! s && S.length > 1 && r.nodeType === 9 && !E && d.match.ID.test(S[0]) && !d.match.ID.test(S[S.length - 1]) && (p = h.find(S.shift(), r, E), r = p.expr ? h.filter(p.expr, p.set)[0] : p.set[0]);
                if (r) {
                    p = s ? {
                        expr: S.pop(),
                        set: y(s)
                    }: h.find(S.pop(), S.length !== 1 || S[0] !== "~" && S[0] !== "+" || !r.parentNode ? r: r.parentNode, E),
                    f = p.expr ? h.filter(p.expr, p.set) : p.set,
                    S.length > 0 ? l = y(f) : w = !1;
                    while (S.length) m = S.pop(),
                    g = m,
                    d.relative[m] ? g = S.pop() : m = "",
                    g == null && (g = r),
                    d.relative[m](l, g, E)
                } else l = S = []
            }
            l || (l = f),
            l || h.error(m || t);
            if (o.call(l) === "[object Array]") if (!w) i.push.apply(i, l);
            else if (r && r.nodeType === 1) for (b = 0; l[b] != null; b++) l[b] && (l[b] === !0 || l[b].nodeType === 1 && h.contains(r, l[b])) && i.push(f[b]);
            else for (b = 0; l[b] != null; b++) l[b] && l[b].nodeType === 1 && i.push(f[b]);
            else y(l, i);
            return c && (h(c, u, i, s), h.uniqueSort(i)),
            i
        };
        h.uniqueSort = function(e) {
            if (w) {
                u = a,
                e.sort(w);
                if (u) for (var t = 1; t < e.length; t++) e[t] === e[t - 1] && e.splice(t--, 1)
            }
            return e
        },
        h.matches = function(e, t) {
            return h(e, null, null, t)
        },
        h.matchesSelector = function(e, t) {
            return h(t, null, null, [e]).length > 0
        },
        h.find = function(e, t, n) {
            var r, i, s, o, u, a;
            if (!e) return [];
            for (i = 0, s = d.order.length; i < s; i++) {
                u = d.order[i];
                if (o = d.leftMatch[u].exec(e)) {
                    a = o[1],
                    o.splice(1, 1);
                    if (a.substr(a.length - 1) !== "\\") {
                        o[1] = (o[1] || "").replace(f, ""),
                        r = d.find[u](o, t, n);
                        if (r != null) {
                            e = e.replace(d.match[u], "");
                            break
                        }
                    }
                }
            }
            return r || (r = typeof t.getElementsByTagName != "undefined" ? t.getElementsByTagName("*") : []),
            {
                set: r,
                expr: e
            }
        },
        h.filter = function(e, n, r, i) {
            var s, o, u, a, f, l, c, p, v, m = e,
            g = [],
            y = n,
            b = n && n[0] && h.isXML(n[0]);
            while (e && n.length) {
                for (u in d.filter) if ((s = d.leftMatch[u].exec(e)) != null && s[2]) {
                    l = d.filter[u],
                    c = s[1],
                    o = !1,
                    s.splice(1, 1);
                    if (c.substr(c.length - 1) === "\\") continue;
                    y === g && (g = []);
                    if (d.preFilter[u]) {
                        s = d.preFilter[u](s, y, r, g, i, b);
                        if (!s) o = a = !0;
                        else if (s === !0) continue
                    }
                    if (s) for (p = 0; (f = y[p]) != null; p++) f && (a = l(f, s, p, y), v = i ^ a, r && a != null ? v ? o = !0 : y[p] = !1 : v && (g.push(f), o = !0));
                    if (a !== t) {
                        r || (y = g),
                        e = e.replace(d.match[u], "");
                        if (!o) return [];
                        break
                    }
                }
                if (e === m) {
                    if (o != null) break;
                    h.error(e)
                }
                m = e
            }
            return y
        },
        h.error = function(e) {
            throw new Error("Syntax error, unrecognized expression: " + e)
        };
        var p = h.getText = function(e) {
            var t, n, r = e.nodeType,
            i = "";
            if (r) {
                if (r === 1 || r === 9) {
                    if (typeof e.textContent == "string") return e.textContent;
                    if (typeof e.innerText == "string") return e.innerText.replace(l, "");
                    for (e = e.firstChild; e; e = e.nextSibling) i += p(e)
                } else if (r === 3 || r === 4) return e.nodeValue
            } else for (t = 0; n = e[t]; t++) n.nodeType !== 8 && (i += p(n));
            return i
        },
        d = h.selectors = {
            order: ["ID", "NAME", "TAG"],
            match: {
                ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
                CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
                NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
                ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
                TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
                CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
                POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
                PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
            },
            leftMatch: {},
            attrMap: {
                "class": "className",
                "for": "htmlFor"
            },
            attrHandle: {
                href: function(e) {
                    return e.getAttribute("href")
                },
                type: function(e) {
                    return e.getAttribute("type")
                }
            },
            relative: {
                "+": function(e, t) {
                    var n = typeof t == "string",
                    r = n && !c.test(t),
                    i = n && !r;
                    r && (t = t.toLowerCase());
                    for (var s = 0,
                    o = e.length,
                    u; s < o; s++) if (u = e[s]) {
                        while ((u = u.previousSibling) && u.nodeType !== 1);
                        e[s] = i || u && u.nodeName.toLowerCase() === t ? u || !1 : u === t
                    }
                    i && h.filter(t, e, !0)
                },
                ">": function(e, t) {
                    var n, r = typeof t == "string",
                    i = 0,
                    s = e.length;
                    if (r && !c.test(t)) {
                        t = t.toLowerCase();
                        for (; i < s; i++) {
                            n = e[i];
                            if (n) {
                                var o = n.parentNode;
                                e[i] = o.nodeName.toLowerCase() === t ? o: !1
                            }
                        }
                    } else {
                        for (; i < s; i++) n = e[i],
                        n && (e[i] = r ? n.parentNode: n.parentNode === t);
                        r && h.filter(t, e, !0)
                    }
                },
                "": function(e, t, n) {
                    var r, s = i++,
                    o = x;
                    typeof t == "string" && !c.test(t) && (t = t.toLowerCase(), r = t, o = S),
                    o("parentNode", t, s, e, r, n)
                },
                "~": function(e, t, n) {
                    var r, s = i++,
                    o = x;
                    typeof t == "string" && !c.test(t) && (t = t.toLowerCase(), r = t, o = S),
                    o("previousSibling", t, s, e, r, n)
                }
            },
            find: {
                ID: function(e, t, n) {
                    if (typeof t.getElementById != "undefined" && !n) {
                        var r = t.getElementById(e[1]);
                        return r && r.parentNode ? [r] : []
                    }
                },
                NAME: function(e, t) {
                    if (typeof t.getElementsByName != "undefined") {
                        var n = [],
                        r = t.getElementsByName(e[1]);
                        for (var i = 0,
                        s = r.length; i < s; i++) r[i].getAttribute("name") === e[1] && n.push(r[i]);
                        return n.length === 0 ? null: n
                    }
                },
                TAG: function(e, t) {
                    if (typeof t.getElementsByTagName != "undefined") return t.getElementsByTagName(e[1])
                }
            },
            preFilter: {
                CLASS: function(e, t, n, r, i, s) {
                    e = " " + e[1].replace(f, "") + " ";
                    if (s) return e;
                    for (var o = 0,
                    u; (u = t[o]) != null; o++) u && (i ^ (u.className && (" " + u.className + " ").replace(/[\t\n\r]/g, " ").indexOf(e) >= 0) ? n || r.push(u) : n && (t[o] = !1));
                    return ! 1
                },
                ID: function(e) {
                    return e[1].replace(f, "")
                },
                TAG: function(e, t) {
                    return e[1].replace(f, "").toLowerCase()
                },
                CHILD: function(e) {
                    if (e[1] === "nth") {
                        e[2] || h.error(e[0]),
                        e[2] = e[2].replace(/^\+|\s*/g, "");
                        var t = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2] === "even" && "2n" || e[2] === "odd" && "2n+1" || !/\D/.test(e[2]) && "0n+" + e[2] || e[2]);
                        e[2] = t[1] + (t[2] || 1) - 0,
                        e[3] = t[3] - 0
                    } else e[2] && h.error(e[0]);
                    return e[0] = i++,
                    e
                },
                ATTR: function(e, t, n, r, i, s) {
                    var o = e[1] = e[1].replace(f, "");
                    return ! s && d.attrMap[o] && (e[1] = d.attrMap[o]),
                    e[4] = (e[4] || e[5] || "").replace(f, ""),
                    e[2] === "~=" && (e[4] = " " + e[4] + " "),
                    e
                },
                PSEUDO: function(t, n, r, i, s) {
                    if (t[1] === "not") {
                        if (! ((e.exec(t[3]) || "").length > 1 || /^\w/.test(t[3]))) {
                            var o = h.filter(t[3], n, r, !0 ^ s);
                            return r || i.push.apply(i, o),
                            !1
                        }
                        t[3] = h(t[3], null, null, n)
                    } else if (d.match.POS.test(t[0]) || d.match.CHILD.test(t[0])) return ! 0;
                    return t
                },
                POS: function(e) {
                    return e.unshift(!0),
                    e
                }
            },
            filters: {
                enabled: function(e) {
                    return e.disabled === !1 && e.type !== "hidden"
                },
                disabled: function(e) {
                    return e.disabled === !0
                },
                checked: function(e) {
                    return e.checked === !0
                },
                selected: function(e) {
                    return e.parentNode && e.parentNode.selectedIndex,
                    e.selected === !0
                },
                parent: function(e) {
                    return !! e.firstChild
                },
                empty: function(e) {
                    return ! e.firstChild
                },
                has: function(e, t, n) {
                    return !! h(n[3], e).length
                },
                header: function(e) {
                    return /h\d/i.test(e.nodeName)
                },
                text: function(e) {
                    var t = e.getAttribute("type"),
                    n = e.type;
                    return e.nodeName.toLowerCase() === "input" && "text" === n && (t === n || t === null)
                },
                radio: function(e) {
                    return e.nodeName.toLowerCase() === "input" && "radio" === e.type
                },
                checkbox: function(e) {
                    return e.nodeName.toLowerCase() === "input" && "checkbox" === e.type
                },
                file: function(e) {
                    return e.nodeName.toLowerCase() === "input" && "file" === e.type
                },
                password: function(e) {
                    return e.nodeName.toLowerCase() === "input" && "password" === e.type
                },
                submit: function(e) {
                    var t = e.nodeName.toLowerCase();
                    return (t === "input" || t === "button") && "submit" === e.type
                },
                image: function(e) {
                    return e.nodeName.toLowerCase() === "input" && "image" === e.type
                },
                reset: function(e) {
                    var t = e.nodeName.toLowerCase();
                    return (t === "input" || t === "button") && "reset" === e.type
                },
                button: function(e) {
                    var t = e.nodeName.toLowerCase();
                    return t === "input" && "button" === e.type || t === "button"
                },
                input: function(e) {
                    return /input|select|textarea|button/i.test(e.nodeName)
                },
                focus: function(e) {
                    return e === e.ownerDocument.activeElement
                }
            },
            setFilters: {
                first: function(e, t) {
                    return t === 0
                },
                last: function(e, t, n, r) {
                    return t === r.length - 1
                },
                even: function(e, t) {
                    return t % 2 === 0
                },
                odd: function(e, t) {
                    return t % 2 === 1
                },
                lt: function(e, t, n) {
                    return t < n[3] - 0
                },
                gt: function(e, t, n) {
                    return t > n[3] - 0
                },
                nth: function(e, t, n) {
                    return n[3] - 0 === t
                },
                eq: function(e, t, n) {
                    return n[3] - 0 === t
                }
            },
            filter: {
                PSEUDO: function(e, t, n, r) {
                    var i = t[1],
                    s = d.filters[i];
                    if (s) return s(e, n, t, r);
                    if (i === "contains") return (e.textContent || e.innerText || p([e]) || "").indexOf(t[3]) >= 0;
                    if (i === "not") {
                        var o = t[3];
                        for (var u = 0,
                        a = o.length; u < a; u++) if (o[u] === e) return ! 1;
                        return ! 0
                    }
                    h.error(i)
                },
                CHILD: function(e, t) {
                    var n, i, s, o, u, a, f, l = t[1],
                    c = e;
                    switch (l) {
                    case "only":
                    case "first":
                        while (c = c.previousSibling) if (c.nodeType === 1) return ! 1;
                        if (l === "first") return ! 0;
                        c = e;
                    case "last":
                        while (c = c.nextSibling) if (c.nodeType === 1) return ! 1;
                        return ! 0;
                    case "nth":
                        n = t[2],
                        i = t[3];
                        if (n === 1 && i === 0) return ! 0;
                        s = t[0],
                        o = e.parentNode;
                        if (o && (o[r] !== s || !e.nodeIndex)) {
                            a = 0;
                            for (c = o.firstChild; c; c = c.nextSibling) c.nodeType === 1 && (c.nodeIndex = ++a);
                            o[r] = s
                        }
                        return f = e.nodeIndex - i,
                        n === 0 ? f === 0 : f % n === 0 && f / n >= 0
                    }
                },
                ID: function(e, t) {
                    return e.nodeType === 1 && e.getAttribute("id") === t
                },
                TAG: function(e, t) {
                    return t === "*" && e.nodeType === 1 || !!e.nodeName && e.nodeName.toLowerCase() === t
                },
                CLASS: function(e, t) {
                    return (" " + (e.className || e.getAttribute("class")) + " ").indexOf(t) > -1
                },
                ATTR: function(e, t) {
                    var n = t[1],
                    r = h.attr ? h.attr(e, n) : d.attrHandle[n] ? d.attrHandle[n](e) : e[n] != null ? e[n] : e.getAttribute(n),
                    i = r + "",
                    s = t[2],
                    o = t[4];
                    return r == null ? s === "!=": !s && h.attr ? r != null: s === "=" ? i === o: s === "*=" ? i.indexOf(o) >= 0 : s === "~=" ? (" " + i + " ").indexOf(o) >= 0 : o ? s === "!=" ? i !== o: s === "^=" ? i.indexOf(o) === 0 : s === "$=" ? i.substr(i.length - o.length) === o: s === "|=" ? i === o || i.substr(0, o.length + 1) === o + "-": !1 : i && r !== !1
                },
                POS: function(e, t, n, r) {
                    var i = t[2],
                    s = d.setFilters[i];
                    if (s) return s(e, n, t, r)
                }
            }
        },
        v = d.match.POS,
        m = function(e, t) {
            return "\\" + (t - 0 + 1)
        };
        for (var g in d.match) d.match[g] = new RegExp(d.match[g].source + /(?![^\[]*\])(?![^\(]*\))/.source),
        d.leftMatch[g] = new RegExp(/(^(?:.|\r|\n)*?)/.source + d.match[g].source.replace(/\\(\d+)/g, m));
        var y = function(e, t) {
            return e = Array.prototype.slice.call(e, 0),
            t ? (t.push.apply(t, e), t) : e
        };
        try {
            Array.prototype.slice.call(n.documentElement.childNodes, 0)[0].nodeType
        } catch(b) {
            y = function(e, t) {
                var n = 0,
                r = t || [];
                if (o.call(e) === "[object Array]") Array.prototype.push.apply(r, e);
                else if (typeof e.length == "number") for (var i = e.length; n < i; n++) r.push(e[n]);
                else for (; e[n]; n++) r.push(e[n]);
                return r
            }
        }
        var w, E;
        n.documentElement.compareDocumentPosition ? w = function(e, t) {
            return e === t ? (u = !0, 0) : !e.compareDocumentPosition || !t.compareDocumentPosition ? e.compareDocumentPosition ? -1 : 1 : e.compareDocumentPosition(t) & 4 ? -1 : 1
        }: (w = function(e, t) {
            if (e === t) return u = !0,
            0;
            if (e.sourceIndex && t.sourceIndex) return e.sourceIndex - t.sourceIndex;
            var n, r, i = [],
            s = [],
            o = e.parentNode,
            a = t.parentNode,
            f = o;
            if (o === a) return E(e, t);
            if (!o) return - 1;
            if (!a) return 1;
            while (f) i.unshift(f),
            f = f.parentNode;
            f = a;
            while (f) s.unshift(f),
            f = f.parentNode;
            n = i.length,
            r = s.length;
            for (var l = 0; l < n && l < r; l++) if (i[l] !== s[l]) return E(i[l], s[l]);
            return l === n ? E(e, s[l], -1) : E(i[l], t, 1)
        },
        E = function(e, t, n) {
            if (e === t) return n;
            var r = e.nextSibling;
            while (r) {
                if (r === t) return - 1;
                r = r.nextSibling
            }
            return 1
        }),
        function() {
            var e = n.createElement("div"),
            r = "script" + (new Date).getTime(),
            i = n.documentElement;
            e.innerHTML = "<a name='" + r + "'/>",
            i.insertBefore(e, i.firstChild),
            n.getElementById(r) && (d.find.ID = function(e, n, r) {
                if (typeof n.getElementById != "undefined" && !r) {
                    var i = n.getElementById(e[1]);
                    return i ? i.id === e[1] || typeof i.getAttributeNode != "undefined" && i.getAttributeNode("id").nodeValue === e[1] ? [i] : t: []
                }
            },
            d.filter.ID = function(e, t) {
                var n = typeof e.getAttributeNode != "undefined" && e.getAttributeNode("id");
                return e.nodeType === 1 && n && n.nodeValue === t
            }),
            i.removeChild(e),
            i = e = null
        } (),
        function() {
            var e = n.createElement("div");
            e.appendChild(n.createComment("")),
            e.getElementsByTagName("*").length > 0 && (d.find.TAG = function(e, t) {
                var n = t.getElementsByTagName(e[1]);
                if (e[1] === "*") {
                    var r = [];
                    for (var i = 0; n[i]; i++) n[i].nodeType === 1 && r.push(n[i]);
                    n = r
                }
                return n
            }),
            e.innerHTML = "<a href='#'></a>",
            e.firstChild && typeof e.firstChild.getAttribute != "undefined" && e.firstChild.getAttribute("href") !== "#" && (d.attrHandle.href = function(e) {
                return e.getAttribute("href", 2)
            }),
            e = null
        } (),
        n.querySelectorAll &&
        function() {
            var e = h,
            t = n.createElement("div"),
            r = "__sizzle__";
            t.innerHTML = "<p class='TEST'></p>";
            if (t.querySelectorAll && t.querySelectorAll(".TEST").length === 0) return;
            h = function(t, i, s, o) {
                i = i || n;
                if (!o && !h.isXML(i)) {
                    var u = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(t);
                    if (u && (i.nodeType === 1 || i.nodeType === 9)) {
                        if (u[1]) return y(i.getElementsByTagName(t), s);
                        if (u[2] && d.find.CLASS && i.getElementsByClassName) return y(i.getElementsByClassName(u[2]), s)
                    }
                    if (i.nodeType === 9) {
                        if (t === "body" && i.body) return y([i.body], s);
                        if (u && u[3]) {
                            var a = i.getElementById(u[3]);
                            if (!a || !a.parentNode) return y([], s);
                            if (a.id === u[3]) return y([a], s)
                        }
                        try {
                            return y(i.querySelectorAll(t), s)
                        } catch(f) {}
                    } else if (i.nodeType === 1 && i.nodeName.toLowerCase() !== "object") {
                        var l = i,
                        c = i.getAttribute("id"),
                        p = c || r,
                        v = i.parentNode,
                        m = /^\s*[+~]/.test(t);
                        c ? p = p.replace(/'/g, "\\$&") : i.setAttribute("id", p),
                        m && v && (i = i.parentNode);
                        try {
                            if (!m || v) return y(i.querySelectorAll("[id='" + p + "'] " + t), s)
                        } catch(g) {} finally {
                            c || l.removeAttribute("id")
                        }
                    }
                }
                return e(t, i, s, o)
            };
            for (var i in e) h[i] = e[i];
            t = null
        } (),
        function() {
            var e = n.documentElement,
            t = e.matchesSelector || e.mozMatchesSelector || e.webkitMatchesSelector || e.msMatchesSelector;
            if (t) {
                var r = !t.call(n.createElement("div"), "div"),
                i = !1;
                try {
                    t.call(n.documentElement, "[test!='']:sizzle")
                } catch(s) {
                    i = !0
                }
                h.matchesSelector = function(e, n) {
                    n = n.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
                    if (!h.isXML(e)) try {
                        if (i || !d.match.PSEUDO.test(n) && !/!=/.test(n)) {
                            var s = t.call(e, n);
                            if (s || !r || e.document && e.document.nodeType !== 11) return s
                        }
                    } catch(o) {}
                    return h(n, null, null, [e]).length > 0
                }
            }
        } (),
        function() {
            var e = n.createElement("div");
            e.innerHTML = "<div class='test e'></div><div class='test'></div>";
            if (!e.getElementsByClassName || e.getElementsByClassName("e").length === 0) return;
            e.lastChild.className = "e";
            if (e.getElementsByClassName("e").length === 1) return;
            d.order.splice(1, 0, "CLASS"),
            d.find.CLASS = function(e, t, n) {
                if (typeof t.getElementsByClassName != "undefined" && !n) return t.getElementsByClassName(e[1])
            },
            e = null
        } (),
        n.documentElement.contains ? h.contains = function(e, t) {
            return e !== t && (e.contains ? e.contains(t) : !0)
        }: n.documentElement.compareDocumentPosition ? h.contains = function(e, t) {
            return !! (e.compareDocumentPosition(t) & 16)
        }: h.contains = function() {
            return ! 1
        },
        h.isXML = function(e) {
            var t = (e ? e.ownerDocument || e: 0).documentElement;
            return t ? t.nodeName !== "HTML": !1
        };
        var T = function(e, t, n) {
            var r, i = [],
            s = "",
            o = t.nodeType ? [t] : t;
            while (r = d.match.PSEUDO.exec(e)) s += r[0],
            e = e.replace(d.match.PSEUDO, "");
            e = d.relative[e] ? e + "*": e;
            for (var u = 0,
            a = o.length; u < a; u++) h(e, o[u], i, n);
            return h.filter(s, i)
        };
        h.attr = s.attr,
        h.selectors.attrMap = {},
        s.find = h,
        s.expr = h.selectors,
        s.expr[":"] = s.expr.filters,
        s.unique = h.uniqueSort,
        s.text = h.getText,
        s.isXMLDoc = h.isXML,
        s.contains = h.contains
    } ();
    var j = /Until$/,
    F = /^(?:parents|prevUntil|prevAll)/,
    I = /,/,
    q = /^.[^:#\[\.,]*$/,
    R = Array.prototype.slice,
    U = s.expr.match.POS,
    z = {
        children: !0,
        contents: !0,
        next: !0,
        prev: !0
    };
    s.fn.extend({
        find: function(e) {
            var t = this,
            n, r;
            if (typeof e != "string") return s(e).filter(function() {
                for (n = 0, r = t.length; n < r; n++) if (s.contains(t[n], this)) return ! 0
            });
            var i = this.pushStack("", "find", e),
            o,
            u,
            a;
            for (n = 0, r = this.length; n < r; n++) {
                o = i.length,
                s.find(e, this[n], i);
                if (n > 0) for (u = o; u < i.length; u++) for (a = 0; a < o; a++) if (i[a] === i[u]) {
                    i.splice(u--, 1);
                    break
                }
            }
            return i
        },
        has: function(e) {
            var t = s(e);
            return this.filter(function() {
                for (var e = 0,
                n = t.length; e < n; e++) if (s.contains(this, t[e])) return ! 0
            })
        },
        not: function(e) {
            return this.pushStack(X(this, e, !1), "not", e)
        },
        filter: function(e) {
            return this.pushStack(X(this, e, !0), "filter", e)
        },
        is: function(e) {
            return !! e && (typeof e == "string" ? U.test(e) ? s(e, this.context).index(this[0]) >= 0 : s.filter(e, this).length > 0 : this.filter(e).length > 0)
        },
        closest: function(e, t) {
            var n = [],
            r,
            i,
            o = this[0];
            if (s.isArray(e)) {
                var u = 1;
                while (o && o.ownerDocument && o !== t) {
                    for (r = 0; r < e.length; r++) s(o).is(e[r]) && n.push({
                        selector: e[r],
                        elem: o,
                        level: u
                    });
                    o = o.parentNode,
                    u++
                }
                return n
            }
            var a = U.test(e) || typeof e != "string" ? s(e, t || this.context) : 0;
            for (r = 0, i = this.length; r < i; r++) {
                o = this[r];
                while (o) {
                    if (a ? a.index(o) > -1 : s.find.matchesSelector(o, e)) {
                        n.push(o);
                        break
                    }
                    o = o.parentNode;
                    if (!o || !o.ownerDocument || o === t || o.nodeType === 11) break
                }
            }
            return n = n.length > 1 ? s.unique(n) : n,
            this.pushStack(n, "closest", e)
        },
        index: function(e) {
            return e ? typeof e == "string" ? s.inArray(this[0], s(e)) : s.inArray(e.jquery ? e[0] : e, this) : this[0] && this[0].parentNode ? this.prevAll().length: -1
        },
        add: function(e, t) {
            var n = typeof e == "string" ? s(e, t) : s.makeArray(e && e.nodeType ? [e] : e),
            r = s.merge(this.get(), n);
            return this.pushStack(W(n[0]) || W(r[0]) ? r: s.unique(r))
        },
        andSelf: function() {
            return this.add(this.prevObject)
        }
    }),
    s.each({
        parent: function(e) {
            var t = e.parentNode;
            return t && t.nodeType !== 11 ? t: null
        },
        parents: function(e) {
            return s.dir(e, "parentNode")
        },
        parentsUntil: function(e, t, n) {
            return s.dir(e, "parentNode", n)
        },
        next: function(e) {
            return s.nth(e, 2, "nextSibling")
        },
        prev: function(e) {
            return s.nth(e, 2, "previousSibling")
        },
        nextAll: function(e) {
            return s.dir(e, "nextSibling")
        },
        prevAll: function(e) {
            return s.dir(e, "previousSibling")
        },
        nextUntil: function(e, t, n) {
            return s.dir(e, "nextSibling", n)
        },
        prevUntil: function(e, t, n) {
            return s.dir(e, "previousSibling", n)
        },
        siblings: function(e) {
            return s.sibling(e.parentNode.firstChild, e)
        },
        children: function(e) {
            return s.sibling(e.firstChild)
        },
        contents: function(e) {
            return s.nodeName(e, "iframe") ? e.contentDocument || e.contentWindow.document: s.makeArray(e.childNodes)
        }
    },
    function(e, t) {
        s.fn[e] = function(n, r) {
            var i = s.map(this, t, n);
            return j.test(e) || (r = n),
            r && typeof r == "string" && (i = s.filter(r, i)),
            i = this.length > 1 && !z[e] ? s.unique(i) : i,
            (this.length > 1 || I.test(r)) && F.test(e) && (i = i.reverse()),
            this.pushStack(i, e, R.call(arguments).join(","))
        }
    }),
    s.extend({
        filter: function(e, t, n) {
            return n && (e = ":not(" + e + ")"),
            t.length === 1 ? s.find.matchesSelector(t[0], e) ? [t[0]] : [] : s.find.matches(e, t)
        },
        dir: function(e, n, r) {
            var i = [],
            o = e[n];
            while (o && o.nodeType !== 9 && (r === t || o.nodeType !== 1 || !s(o).is(r))) o.nodeType === 1 && i.push(o),
            o = o[n];
            return i
        },
        nth: function(e, t, n, r) {
            t = t || 1;
            var i = 0;
            for (; e; e = e[n]) if (e.nodeType === 1 && ++i === t) break;
            return e
        },
        sibling: function(e, t) {
            var n = [];
            for (; e; e = e.nextSibling) e.nodeType === 1 && e !== t && n.push(e);
            return n
        }
    });
    var $ = "abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
    J = / jQuery\d+="(?:\d+|null)"/g,
    K = /^\s+/,
    Q = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
    G = /<([\w:]+)/,
    Y = /<tbody/i,
    Z = /<|&#?\w+;/,
    et = /<(?:script|style)/i,
    tt = /<(?:script|object|embed|option|style)/i,
    nt = new RegExp("<(?:" + $ + ")", "i"),
    rt = /checked\s*(?:[^=]|=\s*.checked.)/i,
    it = /\/(java|ecma)script/i,
    st = /^\s*<!(?:\[CDATA\[|\-\-)/,
    ot = {
        option: [1, "<select multiple='multiple'>", "</select>"],
        legend: [1, "<fieldset>", "</fieldset>"],
        thead: [1, "<table>", "</table>"],
        tr: [2, "<table><tbody>", "</tbody></table>"],
        td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
        col: [2, "<table><tbody></tbody><colgroup>", "</colgroup></table>"],
        area: [1, "<map>", "</map>"],
        _default: [0, "", ""]
    },
    ut = V(n);
    ot.optgroup = ot.option,
    ot.tbody = ot.tfoot = ot.colgroup = ot.caption = ot.thead,
    ot.th = ot.td,
    s.support.htmlSerialize || (ot._default = [1, "div<div>", "</div>"]),
    s.fn.extend({
        text: function(e) {
            return s.isFunction(e) ? this.each(function(t) {
                var n = s(this);
                n.text(e.call(this, t, n.text()))
            }) : typeof e != "object" && e !== t ? this.empty().append((this[0] && this[0].ownerDocument || n).createTextNode(e)) : s.text(this)
        },
        wrapAll: function(e) {
            if (s.isFunction(e)) return this.each(function(t) {
                s(this).wrapAll(e.call(this, t))
            });
            if (this[0]) {
                var t = s(e, this[0].ownerDocument).eq(0).clone(!0);
                this[0].parentNode && t.insertBefore(this[0]),
                t.map(function() {
                    var e = this;
                    while (e.firstChild && e.firstChild.nodeType === 1) e = e.firstChild;
                    return e
                }).append(this)
            }
            return this
        },
        wrapInner: function(e) {
            return s.isFunction(e) ? this.each(function(t) {
                s(this).wrapInner(e.call(this, t))
            }) : this.each(function() {
                var t = s(this),
                n = t.contents();
                n.length ? n.wrapAll(e) : t.append(e)
            })
        },
        wrap: function(e) {
            var t = s.isFunction(e);
            return this.each(function(n) {
                s(this).wrapAll(t ? e.call(this, n) : e)
            })
        },
        unwrap: function() {
            return this.parent().each(function() {
                s.nodeName(this, "body") || s(this).replaceWith(this.childNodes)
            }).end()
        },
        append: function() {
            return this.domManip(arguments, !0,
            function(e) {
                this.nodeType === 1 && this.appendChild(e)
            })
        },
        prepend: function() {
            return this.domManip(arguments, !0,
            function(e) {
                this.nodeType === 1 && this.insertBefore(e, this.firstChild)
            })
        },
        before: function() {
            if (this[0] && this[0].parentNode) return this.domManip(arguments, !1,
            function(e) {
                this.parentNode.insertBefore(e, this)
            });
            if (arguments.length) {
                var e = s.clean(arguments);
                return e.push.apply(e, this.toArray()),
                this.pushStack(e, "before", arguments)
            }
        },
        after: function() {
            if (this[0] && this[0].parentNode) return this.domManip(arguments, !1,
            function(e) {
                this.parentNode.insertBefore(e, this.nextSibling)
            });
            if (arguments.length) {
                var e = this.pushStack(this, "after", arguments);
                return e.push.apply(e, s.clean(arguments)),
                e
            }
        },
        remove: function(e, t) {
            for (var n = 0,
            r; (r = this[n]) != null; n++) if (!e || s.filter(e, [r]).length) ! t && r.nodeType === 1 && (s.cleanData(r.getElementsByTagName("*")), s.cleanData([r])),
            r.parentNode && r.parentNode.removeChild(r);
            return this
        },
        empty: function() {
            for (var e = 0,
            t; (t = this[e]) != null; e++) {
                t.nodeType === 1 && s.cleanData(t.getElementsByTagName("*"));
                while (t.firstChild) t.removeChild(t.firstChild)
            }
            return this
        },
        clone: function(e, t) {
            return e = e == null ? !1 : e,
            t = t == null ? e: t,
            this.map(function() {
                return s.clone(this, e, t)
            })
        },
        html: function(e) {
            if (e === t) return this[0] && this[0].nodeType === 1 ? this[0].innerHTML.replace(J, "") : null;
            if (typeof e == "string" && !et.test(e) && (s.support.leadingWhitespace || !K.test(e)) && !ot[(G.exec(e) || ["", ""])[1].toLowerCase()]) {
                e = e.replace(Q, "<$1></$2>");
                try {
                    for (var n = 0,
                    r = this.length; n < r; n++) this[n].nodeType === 1 && (s.cleanData(this[n].getElementsByTagName("*")), this[n].innerHTML = e)
                } catch(i) {
                    this.empty().append(e)
                }
            } else s.isFunction(e) ? this.each(function(t) {
                var n = s(this);
                n.html(e.call(this, t, n.html()))
            }) : this.empty().append(e);
            return this
        },
        replaceWith: function(e) {
            return this[0] && this[0].parentNode ? s.isFunction(e) ? this.each(function(t) {
                var n = s(this),
                r = n.html();
                n.replaceWith(e.call(this, t, r))
            }) : (typeof e != "string" && (e = s(e).detach()), this.each(function() {
                var t = this.nextSibling,
                n = this.parentNode;
                s(this).remove(),
                t ? s(t).before(e) : s(n).append(e)
            })) : this.length ? this.pushStack(s(s.isFunction(e) ? e() : e), "replaceWith", e) : this
        },
        detach: function(e) {
            return this.remove(e, !0)
        },
        domManip: function(e, n, r) {
            var i, o, u, a, f = e[0],
            l = [];
            if (!s.support.checkClone && arguments.length === 3 && typeof f == "string" && rt.test(f)) return this.each(function() {
                s(this).domManip(e, n, r, !0)
            });
            if (s.isFunction(f)) return this.each(function(i) {
                var o = s(this);
                e[0] = f.call(this, i, n ? o.html() : t),
                o.domManip(e, n, r)
            });
            if (this[0]) {
                a = f && f.parentNode,
                s.support.parentNode && a && a.nodeType === 11 && a.childNodes.length === this.length ? i = {
                    fragment: a
                }: i = s.buildFragment(e, this, l),
                u = i.fragment,
                u.childNodes.length === 1 ? o = u = u.firstChild: o = u.firstChild;
                if (o) {
                    n = n && s.nodeName(o, "tr");
                    for (var c = 0,
                    h = this.length,
                    p = h - 1; c < h; c++) r.call(n ? at(this[c], o) : this[c], i.cacheable || h > 1 && c < p ? s.clone(u, !0, !0) : u)
                }
                l.length && s.each(l, vt)
            }
            return this
        }
    }),
    s.buildFragment = function(e, t, r) {
        var i, o, u, a, f = e[0];
        return t && t[0] && (a = t[0].ownerDocument || t[0]),
        a.createDocumentFragment || (a = n),
        e.length === 1 && typeof f == "string" && f.length < 512 && a === n && f.charAt(0) === "<" && !tt.test(f) && (s.support.checkClone || !rt.test(f)) && (s.support.html5Clone || !nt.test(f)) && (o = !0, u = s.fragments[f], u && u !== 1 && (i = u)),
        i || (i = a.createDocumentFragment(), s.clean(e, a, i, r)),
        o && (s.fragments[f] = u ? i: 1),
        {
            fragment: i,
            cacheable: o
        }
    },
    s.fragments = {},
    s.each({
        appendTo: "append",
        prependTo: "prepend",
        insertBefore: "before",
        insertAfter: "after",
        replaceAll: "replaceWith"
    },
    function(e, t) {
        s.fn[e] = function(n) {
            var r = [],
            i = s(n),
            o = this.length === 1 && this[0].parentNode;
            if (o && o.nodeType === 11 && o.childNodes.length === 1 && i.length === 1) return i[t](this[0]),
            this;
            for (var u = 0,
            a = i.length; u < a; u++) {
                var f = (u > 0 ? this.clone(!0) : this).get();
                s(i[u])[t](f),
                r = r.concat(f)
            }
            return this.pushStack(r, e, i.selector)
        }
    }),
    s.extend({
        clone: function(e, t, n) {
            var r, i, o, u = s.support.html5Clone || !nt.test("<" + e.nodeName) ? e.cloneNode(!0) : dt(e);
            if ((!s.support.noCloneEvent || !s.support.noCloneChecked) && (e.nodeType === 1 || e.nodeType === 11) && !s.isXMLDoc(e)) {
                lt(e, u),
                r = ct(e),
                i = ct(u);
                for (o = 0; r[o]; ++o) i[o] && lt(r[o], i[o])
            }
            if (t) {
                ft(e, u);
                if (n) {
                    r = ct(e),
                    i = ct(u);
                    for (o = 0; r[o]; ++o) ft(r[o], i[o])
                }
            }
            return r = i = null,
            u
        },
        clean: function(e, t, r, i) {
            var o;
            t = t || n,
            typeof t.createElement == "undefined" && (t = t.ownerDocument || t[0] && t[0].ownerDocument || n);
            var u = [],
            a;
            for (var f = 0,
            l; (l = e[f]) != null; f++) {
                typeof l == "number" && (l += "");
                if (!l) continue;
                if (typeof l == "string") if (!Z.test(l)) l = t.createTextNode(l);
                else {
                    l = l.replace(Q, "<$1></$2>");
                    var c = (G.exec(l) || ["", ""])[1].toLowerCase(),
                    h = ot[c] || ot._default,
                    p = h[0],
                    d = t.createElement("div");
                    t === n ? ut.appendChild(d) : V(t).appendChild(d),
                    d.innerHTML = h[1] + l + h[2];
                    while (p--) d = d.lastChild;
                    if (!s.support.tbody) {
                        var v = Y.test(l),
                        m = c === "table" && !v ? d.firstChild && d.firstChild.childNodes: h[1] === "<table>" && !v ? d.childNodes: [];
                        for (a = m.length - 1; a >= 0; --a) s.nodeName(m[a], "tbody") && !m[a].childNodes.length && m[a].parentNode.removeChild(m[a])
                    } ! s.support.leadingWhitespace && K.test(l) && d.insertBefore(t.createTextNode(K.exec(l)[0]), d.firstChild),
                    l = d.childNodes
                }
                var g;
                if (!s.support.appendChecked) if (l[0] && typeof(g = l.length) == "number") for (a = 0; a < g; a++) pt(l[a]);
                else pt(l);
                l.nodeType ? u.push(l) : u = s.merge(u, l)
            }
            if (r) {
                o = function(e) {
                    return ! e.type || it.test(e.type)
                };
                for (f = 0; u[f]; f++) if (i && s.nodeName(u[f], "script") && (!u[f].type || u[f].type.toLowerCase() === "text/javascript")) i.push(u[f].parentNode ? u[f].parentNode.removeChild(u[f]) : u[f]);
                else {
                    if (u[f].nodeType === 1) {
                        var y = s.grep(u[f].getElementsByTagName("script"), o);
                        u.splice.apply(u, [f + 1, 0].concat(y))
                    }
                    r.appendChild(u[f])
                }
            }
            return u
        },
        cleanData: function(e) {
            var t, n, r = s.cache,
            i = s.event.special,
            o = s.support.deleteExpando;
            for (var u = 0,
            a; (a = e[u]) != null; u++) {
                if (a.nodeName && s.noData[a.nodeName.toLowerCase()]) continue;
                n = a[s.expando];
                if (n) {
                    t = r[n];
                    if (t && t.events) {
                        for (var f in t.events) i[f] ? s.event.remove(a, f) : s.removeEvent(a, f, t.handle);
                        t.handle && (t.handle.elem = null)
                    }
                    o ? delete a[s.expando] : a.removeAttribute && a.removeAttribute(s.expando),
                    delete r[n]
                }
            }
        }
    });
    var mt = /alpha\([^)]*\)/i,
    gt = /opacity=([^)]*)/,
    yt = /([A-Z]|^ms)/g,
    bt = /^-?\d+(?:px)?$/i,
    wt = /^-?\d/,
    Et = /^([\-+])=([\-+.\de]+)/,
    St = {
        position: "absolute",
        visibility: "hidden",
        display: "block"
    },
    xt = ["Left", "Right"],
    Tt = ["Top", "Bottom"],
    Nt,
    Ct,
    kt;
    s.fn.css = function(e, n) {
        return arguments.length === 2 && n === t ? this: s.access(this, e, n, !0,
        function(e, n, r) {
            return r !== t ? s.style(e, n, r) : s.css(e, n)
        })
    },
    s.extend({
        cssHooks: {
            opacity: {
                get: function(e, t) {
                    if (t) {
                        var n = Nt(e, "opacity", "opacity");
                        return n === "" ? "1": n
                    }
                    return e.style.opacity
                }
            }
        },
        cssNumber: {
            fillOpacity: !0,
            fontWeight: !0,
            lineHeight: !0,
            opacity: !0,
            orphans: !0,
            widows: !0,
            zIndex: !0,
            zoom: !0
        },
        cssProps: {
            "float": s.support.cssFloat ? "cssFloat": "styleFloat"
        },
        style: function(e, n, r, i) {
            if (!e || e.nodeType === 3 || e.nodeType === 8 || !e.style) return;
            var o, u, a = s.camelCase(n),
            f = e.style,
            l = s.cssHooks[a];
            n = s.cssProps[a] || a;
            if (r === t) return l && "get" in l && (o = l.get(e, !1, i)) !== t ? o: f[n];
            u = typeof r,
            u === "string" && (o = Et.exec(r)) && (r = +(o[1] + 1) * +o[2] + parseFloat(s.css(e, n)), u = "number");
            if (r == null || u === "number" && isNaN(r)) return;
            u === "number" && !s.cssNumber[a] && (r += "px");
            if (!l || !("set" in l) || (r = l.set(e, r)) !== t) try {
                f[n] = r
            } catch(c) {}
        },
        css: function(e, n, r) {
            var i, o;
            n = s.camelCase(n),
            o = s.cssHooks[n],
            n = s.cssProps[n] || n,
            n === "cssFloat" && (n = "float");
            if (o && "get" in o && (i = o.get(e, !0, r)) !== t) return i;
            if (Nt) return Nt(e, n)
        },
        swap: function(e, t, n) {
            var r = {};
            for (var i in t) r[i] = e.style[i],
            e.style[i] = t[i];
            n.call(e);
            for (i in t) e.style[i] = r[i]
        }
    }),
    s.curCSS = s.css,
    s.each(["height", "width"],
    function(e, t) {
        s.cssHooks[t] = {
            get: function(e, n, r) {
                var i;
                if (n) return e.offsetWidth !== 0 ? Lt(e, t, r) : (s.swap(e, St,
                function() {
                    i = Lt(e, t, r)
                }), i)
            },
            set: function(e, t) {
                if (!bt.test(t)) return t;
                t = parseFloat(t);
                if (t >= 0) return t + "px"
            }
        }
    }),
    s.support.opacity || (s.cssHooks.opacity = {
        get: function(e, t) {
            return gt.test((t && e.currentStyle ? e.currentStyle.filter: e.style.filter) || "") ? parseFloat(RegExp.$1) / 100 + "": t ? "1": ""
        },
        set: function(e, t) {
            var n = e.style,
            r = e.currentStyle,
            i = s.isNumeric(t) ? "alpha(opacity=" + t * 100 + ")": "",
            o = r && r.filter || n.filter || "";
            n.zoom = 1;
            if (t >= 1 && s.trim(o.replace(mt, "")) === "") {
                n.removeAttribute("filter");
                if (r && !r.filter) return
            }
            n.filter = mt.test(o) ? o.replace(mt, i) : o + " " + i
        }
    }),
    s(function() {
        s.support.reliableMarginRight || (s.cssHooks.marginRight = {
            get: function(e, t) {
                var n;
                return s.swap(e, {
                    display: "inline-block"
                },
                function() {
                    t ? n = Nt(e, "margin-right", "marginRight") : n = e.style.marginRight
                }),
                n
            }
        })
    }),
    n.defaultView && n.defaultView.getComputedStyle && (Ct = function(e, t) {
        var n, r, i;
        return t = t.replace(yt, "-$1").toLowerCase(),
        (r = e.ownerDocument.defaultView) && (i = r.getComputedStyle(e, null)) && (n = i.getPropertyValue(t), n === "" && !s.contains(e.ownerDocument.documentElement, e) && (n = s.style(e, t))),
        n
    }),
    n.documentElement.currentStyle && (kt = function(e, t) {
        var n, r, i, s = e.currentStyle && e.currentStyle[t],
        o = e.style;
        return s === null && o && (i = o[t]) && (s = i),
        !bt.test(s) && wt.test(s) && (n = o.left, r = e.runtimeStyle && e.runtimeStyle.left, r && (e.runtimeStyle.left = e.currentStyle.left), o.left = t === "fontSize" ? "1em": s || 0, s = o.pixelLeft + "px", o.left = n, r && (e.runtimeStyle.left = r)),
        s === "" ? "auto": s
    }),
    Nt = Ct || kt,
    s.expr && s.expr.filters && (s.expr.filters.hidden = function(e) {
        var t = e.offsetWidth,
        n = e.offsetHeight;
        return t === 0 && n === 0 || !s.support.reliableHiddenOffsets && (e.style && e.style.display || s.css(e, "display")) === "none"
    },
    s.expr.filters.visible = function(e) {
        return ! s.expr.filters.hidden(e)
    });
    var At = /%20/g,
    Ot = /\[\]$/,
    Mt = /\r?\n/g,
    _t = /#.*$/,
    Dt = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg,
    Pt = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
    Ht = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,
    Bt = /^(?:GET|HEAD)$/,
    jt = /^\/\//,
    Ft = /\?/,
    It = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
    qt = /^(?:select|textarea)/i,
    Rt = /\s+/,
    Ut = /([?&])_=[^&]*/,
    zt = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
    Wt = s.fn.load,
    Xt = {},
    Vt = {},
    $t, Jt, Kt = ["*/"] + ["*"];
    try {
        $t = i.href
    } catch(Qt) {
        $t = n.createElement("a"),
        $t.href = "",
        $t = $t.href
    }
    Jt = zt.exec($t.toLowerCase()) || [],
    s.fn.extend({
        load: function(e, n, r) {
            if (typeof e != "string" && Wt) return Wt.apply(this, arguments);
            if (!this.length) return this;
            var i = e.indexOf(" ");
            if (i >= 0) {
                var o = e.slice(i, e.length);
                e = e.slice(0, i)
            }
            var u = "GET";
            n && (s.isFunction(n) ? (r = n, n = t) : typeof n == "object" && (n = s.param(n, s.ajaxSettings.traditional), u = "POST"));
            var a = this;
            return s.ajax({
                url: e,
                type: u,
                dataType: "html",
                data: n,
                complete: function(e, t, n) {
                    n = e.responseText,
                    e.isResolved() && (e.done(function(e) {
                        n = e
                    }), a.html(o ? s("<div>").append(n.replace(It, "")).find(o) : n)),
                    r && a.each(r, [n, t, e])
                }
            }),
            this
        },
        serialize: function() {
            return s.param(this.serializeArray())
        },
        serializeArray: function() {
            return this.map(function() {
                return this.elements ? s.makeArray(this.elements) : this
            }).filter(function() {
                return this.name && !this.disabled && (this.checked || qt.test(this.nodeName) || Pt.test(this.type))
            }).map(function(e, t) {
                var n = s(this).val();
                return n == null ? null: s.isArray(n) ? s.map(n,
                function(e, n) {
                    return {
                        name: t.name,
                        value: e.replace(Mt, "\r\n")
                    }
                }) : {
                    name: t.name,
                    value: n.replace(Mt, "\r\n")
                }
            }).get()
        }
    }),
    s.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
    function(e, t) {
        s.fn[t] = function(e) {
            return this.on(t, e)
        }
    }),
    s.each(["get", "post"],
    function(e, n) {
        s[n] = function(e, r, i, o) {
            return s.isFunction(r) && (o = o || i, i = r, r = t),
            s.ajax({
                type: n,
                url: e,
                data: r,
                success: i,
                dataType: o
            })
        }
    }),
    s.extend({
        getScript: function(e, n) {
            return s.get(e, t, n, "script")
        },
        getJSON: function(e, t, n) {
            return s.get(e, t, n, "json")
        },
        ajaxSetup: function(e, t) {
            return t ? Zt(e, s.ajaxSettings) : (t = e, e = s.ajaxSettings),
            Zt(e, t),
            e
        },
        ajaxSettings: {
            url: $t,
            isLocal: Ht.test(Jt[1]),
            global: !0,
            type: "GET",
            contentType: "application/x-www-form-urlencoded",
            processData: !0,
            async: !0,
            accepts: {
                xml: "application/xml, text/xml",
                html: "text/html",
                text: "text/plain",
                json: "application/json, text/javascript",
                "*": Kt
            },
            contents: {
                xml: /xml/,
                html: /html/,
                json: /json/
            },
            responseFields: {
                xml: "responseXML",
                text: "responseText"
            },
            converters: {
                "* text": e.String,
                "text html": !0,
                "text json": s.parseJSON,
                "text xml": s.parseXML
            },
            flatOptions: {
                context: !0,
                url: !0
            }
        },
        ajaxPrefilter: Gt(Xt),
        ajaxTransport: Gt(Vt),
        ajax: function(e, n) {
            function S(e, n, c, h) {
                if (y === 2) return;
                y = 2,
                m && clearTimeout(m),
                v = t,
                p = h || "",
                E.readyState = e > 0 ? 4 : 0;
                var d, g, w, S = n,
                x = c ? tn(r, E, c) : t,
                T,
                N;
                if (e >= 200 && e < 300 || e === 304) {
                    if (r.ifModified) {
                        if (T = E.getResponseHeader("Last-Modified")) s.lastModified[l] = T;
                        if (N = E.getResponseHeader("Etag")) s.etag[l] = N
                    }
                    if (e === 304) S = "notmodified",
                    d = !0;
                    else try {
                        g = nn(r, x),
                        S = "success",
                        d = !0
                    } catch(C) {
                        S = "parsererror",
                        w = C
                    }
                } else {
                    w = S;
                    if (!S || e) S = "error",
                    e < 0 && (e = 0)
                }
                E.status = e,
                E.statusText = "" + (n || S),
                d ? u.resolveWith(i, [g, S, E]) : u.rejectWith(i, [E, S, w]),
                E.statusCode(f),
                f = t,
                b && o.trigger("ajax" + (d ? "Success": "Error"), [E, r, d ? g: w]),
                a.fireWith(i, [E, S]),
                b && (o.trigger("ajaxComplete", [E, r]), --s.active || s.event.trigger("ajaxStop"))
            }
            typeof e == "object" && (n = e, e = t),
            n = n || {};
            var r = s.ajaxSetup({},
            n),
            i = r.context || r,
            o = i !== r && (i.nodeType || i instanceof s) ? s(i) : s.event,
            u = s.Deferred(),
            a = s.Callbacks("once memory"),
            f = r.statusCode || {},
            l,
            c = {},
            h = {},
            p,
            d,
            v,
            m,
            g,
            y = 0,
            b,
            w,
            E = {
                readyState: 0,
                setRequestHeader: function(e, t) {
                    if (!y) {
                        var n = e.toLowerCase();
                        e = h[n] = h[n] || e,
                        c[e] = t
                    }
                    return this
                },
                getAllResponseHeaders: function() {
                    return y === 2 ? p: null
                },
                getResponseHeader: function(e) {
                    var n;
                    if (y === 2) {
                        if (!d) {
                            d = {};
                            while (n = Dt.exec(p)) d[n[1].toLowerCase()] = n[2]
                        }
                        n = d[e.toLowerCase()]
                    }
                    return n === t ? null: n
                },
                overrideMimeType: function(e) {
                    return y || (r.mimeType = e),
                    this
                },
                abort: function(e) {
                    return e = e || "abort",
                    v && v.abort(e),
                    S(0, e),
                    this
                }
            };
            u.promise(E),
            E.success = E.done,
            E.error = E.fail,
            E.complete = a.add,
            E.statusCode = function(e) {
                if (e) {
                    var t;
                    if (y < 2) for (t in e) f[t] = [f[t], e[t]];
                    else t = e[E.status],
                    E.then(t, t)
                }
                return this
            },
            r.url = ((e || r.url) + "").replace(_t, "").replace(jt, Jt[1] + "//"),
            r.dataTypes = s.trim(r.dataType || "*").toLowerCase().split(Rt),
            r.crossDomain == null && (g = zt.exec(r.url.toLowerCase()), r.crossDomain = !(!g || g[1] == Jt[1] && g[2] == Jt[2] && (g[3] || (g[1] === "http:" ? 80 : 443)) == (Jt[3] || (Jt[1] === "http:" ? 80 : 443)))),
            r.data && r.processData && typeof r.data != "string" && (r.data = s.param(r.data, r.traditional)),
            Yt(Xt, r, n, E);
            if (y === 2) return ! 1;
            b = r.global,
            r.type = r.type.toUpperCase(),
            r.hasContent = !Bt.test(r.type),
            b && s.active++===0 && s.event.trigger("ajaxStart");
            if (!r.hasContent) {
                r.data && (r.url += (Ft.test(r.url) ? "&": "?") + r.data, delete r.data),
                l = r.url;
                if (r.cache === !1) {
                    var x = s.now(),
                    T = r.url.replace(Ut, "$1_=" + x);
                    r.url = T + (T === r.url ? (Ft.test(r.url) ? "&": "?") + "_=" + x: "")
                }
            } (r.data && r.hasContent && r.contentType !== !1 || n.contentType) && E.setRequestHeader("Content-Type", r.contentType),
            r.ifModified && (l = l || r.url, s.lastModified[l] && E.setRequestHeader("If-Modified-Since", s.lastModified[l]), s.etag[l] && E.setRequestHeader("If-None-Match", s.etag[l])),
            E.setRequestHeader("Accept", r.dataTypes[0] && r.accepts[r.dataTypes[0]] ? r.accepts[r.dataTypes[0]] + (r.dataTypes[0] !== "*" ? ", " + Kt + "; q=0.01": "") : r.accepts["*"]);
            for (w in r.headers) E.setRequestHeader(w, r.headers[w]);
            if (!r.beforeSend || r.beforeSend.call(i, E, r) !== !1 && y !== 2) {
                for (w in {
                    success: 1,
                    error: 1,
                    complete: 1
                }) E[w](r[w]);
                v = Yt(Vt, r, n, E);
                if (!v) S( - 1, "No Transport");
                else {
                    E.readyState = 1,
                    b && o.trigger("ajaxSend", [E, r]),
                    r.async && r.timeout > 0 && (m = setTimeout(function() {
                        E.abort("timeout")
                    },
                    r.timeout));
                    try {
                        y = 1,
                        v.send(c, S)
                    } catch(N) {
                        if (! (y < 2)) throw N;
                        S( - 1, N)
                    }
                }
                return E
            }
            return E.abort(),
            !1
        },
        param: function(e, n) {
            var r = [],
            i = function(e, t) {
                t = s.isFunction(t) ? t() : t,
                r[r.length] = encodeURIComponent(e) + "=" + encodeURIComponent(t)
            };
            n === t && (n = s.ajaxSettings.traditional);
            if (s.isArray(e) || e.jquery && !s.isPlainObject(e)) s.each(e,
            function() {
                i(this.name, this.value)
            });
            else for (var o in e) en(o, e[o], n, i);
            return r.join("&").replace(At, "+")
        }
    }),
    s.extend({
        active: 0,
        lastModified: {},
        etag: {}
    });
    var rn = s.now(),
    sn = /(\=)\?(&|$)|\?\?/i;
    s.ajaxSetup({
        jsonp: "callback",
        jsonpCallback: function() {
            return s.expando + "_" + rn++
        }
    }),
    s.ajaxPrefilter("json jsonp",
    function(t, n, r) {
        var i = t.contentType === "application/x-www-form-urlencoded" && typeof t.data == "string";
        if (t.dataTypes[0] === "jsonp" || t.jsonp !== !1 && (sn.test(t.url) || i && sn.test(t.data))) {
            var o, u = t.jsonpCallback = s.isFunction(t.jsonpCallback) ? t.jsonpCallback() : t.jsonpCallback,
            a = e[u],
            f = t.url,
            l = t.data,
            c = "$1" + u + "$2";
            return t.jsonp !== !1 && (f = f.replace(sn, c), t.url === f && (i && (l = l.replace(sn, c)), t.data === l && (f += (/\?/.test(f) ? "&": "?") + t.jsonp + "=" + u))),
            t.url = f,
            t.data = l,
            e[u] = function(e) {
                o = [e]
            },
            r.always(function() {
                e[u] = a,
                o && s.isFunction(a) && e[u](o[0])
            }),
            t.converters["script json"] = function() {
                return o || s.error(u + " was not called"),
                o[0]
            },
            t.dataTypes[0] = "json",
            "script"
        }
    }),
    s.ajaxSetup({
        accepts: {
            script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
        },
        contents: {
            script: /javascript|ecmascript/
        },
        converters: {
            "text script": function(e) {
                return s.globalEval(e),
                e
            }
        }
    }),
    s.ajaxPrefilter("script",
    function(e) {
        e.cache === t && (e.cache = !1),
        e.crossDomain && (e.type = "GET", e.global = !1)
    }),
    s.ajaxTransport("script",
    function(e) {
        if (e.crossDomain) {
            var r, i = n.head || n.getElementsByTagName("head")[0] || n.documentElement;
            return {
                send: function(s, o) {
                    r = n.createElement("script"),
                    r.async = "async",
                    e.scriptCharset && (r.charset = e.scriptCharset),
                    r.src = e.url,
                    r.onload = r.onreadystatechange = function(e, n) {
                        if (n || !r.readyState || /loaded|complete/.test(r.readyState)) r.onload = r.onreadystatechange = null,
                        i && r.parentNode && i.removeChild(r),
                        r = t,
                        n || o(200, "success")
                    },
                    i.insertBefore(r, i.firstChild)
                },
                abort: function() {
                    r && r.onload(0, 1)
                }
            }
        }
    });
    var on = e.ActiveXObject ?
    function() {
        for (var e in an) an[e](0, 1)
    }: !1,
    un = 0,
    an;
    s.ajaxSettings.xhr = e.ActiveXObject ?
    function() {
        return ! this.isLocal && fn() || ln()
    }: fn,
    function(e) {
        s.extend(s.support, {
            ajax: !!e,
            cors: !!e && "withCredentials" in e
        })
    } (s.ajaxSettings.xhr()),
    s.support.ajax && s.ajaxTransport(function(n) {
        if (!n.crossDomain || s.support.cors) {
            var r;
            return {
                send: function(i, o) {
                    var u = n.xhr(),
                    a,
                    f;
                    n.username ? u.open(n.type, n.url, n.async, n.username, n.password) : u.open(n.type, n.url, n.async);
                    if (n.xhrFields) for (f in n.xhrFields) u[f] = n.xhrFields[f];
                    n.mimeType && u.overrideMimeType && u.overrideMimeType(n.mimeType),
                    !n.crossDomain && !i["X-Requested-With"] && (i["X-Requested-With"] = "XMLHttpRequest");
                    try {
                        for (f in i) u.setRequestHeader(f, i[f])
                    } catch(l) {}
                    u.send(n.hasContent && n.data || null),
                    r = function(e, i) {
                        var f, l, c, h, p;
                        try {
                            if (r && (i || u.readyState === 4)) {
                                r = t,
                                a && (u.onreadystatechange = s.noop, on && delete an[a]);
                                if (i) u.readyState !== 4 && u.abort();
                                else {
                                    f = u.status,
                                    c = u.getAllResponseHeaders(),
                                    h = {},
                                    p = u.responseXML,
                                    p && p.documentElement && (h.xml = p),
                                    h.text = u.responseText;
                                    try {
                                        l = u.statusText
                                    } catch(d) {
                                        l = ""
                                    } ! f && n.isLocal && !n.crossDomain ? f = h.text ? 200 : 404 : f === 1223 && (f = 204)
                                }
                            }
                        } catch(v) {
                            i || o( - 1, v)
                        }
                        h && o(f, l, h, c)
                    },
                    !n.async || u.readyState === 4 ? r() : (a = ++un, on && (an || (an = {},
                    s(e).unload(on)), an[a] = r), u.onreadystatechange = r)
                },
                abort: function() {
                    r && r(0, 1)
                }
            }
        }
    });
    var cn = {},
    hn, pn, dn = /^(?:toggle|show|hide)$/,
    vn = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
    mn, gn = [["height", "marginTop", "marginBottom", "paddingTop", "paddingBottom"], ["width", "marginLeft", "marginRight", "paddingLeft", "paddingRight"], ["opacity"]],
    yn;
    s.fn.extend({
        show: function(e, t, n) {
            var r, i;
            if (e || e === 0) return this.animate(En("show", 3), e, t, n);
            for (var o = 0,
            u = this.length; o < u; o++) r = this[o],
            r.style && (i = r.style.display, !s._data(r, "olddisplay") && i === "none" && (i = r.style.display = ""), i === "" && s.css(r, "display") === "none" && s._data(r, "olddisplay", Sn(r.nodeName)));
            for (o = 0; o < u; o++) {
                r = this[o];
                if (r.style) {
                    i = r.style.display;
                    if (i === "" || i === "none") r.style.display = s._data(r, "olddisplay") || ""
                }
            }
            return this
        },
        hide: function(e, t, n) {
            if (e || e === 0) return this.animate(En("hide", 3), e, t, n);
            var r, i, o = 0,
            u = this.length;
            for (; o < u; o++) r = this[o],
            r.style && (i = s.css(r, "display"), i !== "none" && !s._data(r, "olddisplay") && s._data(r, "olddisplay", i));
            for (o = 0; o < u; o++) this[o].style && (this[o].style.display = "none");
            return this
        },
        _toggle: s.fn.toggle,
        toggle: function(e, t, n) {
            var r = typeof e == "boolean";
            return s.isFunction(e) && s.isFunction(t) ? this._toggle.apply(this, arguments) : e == null || r ? this.each(function() {
                var t = r ? e: s(this).is(":hidden");
                s(this)[t ? "show": "hide"]()
            }) : this.animate(En("toggle", 3), e, t, n),
            this
        },
        fadeTo: function(e, t, n, r) {
            return this.filter(":hidden").css("opacity", 0).show().end().animate({
                opacity: t
            },
            e, n, r)
        },
        animate: function(e, t, n, r) {
            function o() {
                i.queue === !1 && s._mark(this);
                var t = s.extend({},
                i),
                n = this.nodeType === 1,
                r = n && s(this).is(":hidden"),
                o,
                u,
                a,
                f,
                l,
                c,
                h,
                p,
                d;
                t.animatedProperties = {};
                for (a in e) {
                    o = s.camelCase(a),
                    a !== o && (e[o] = e[a], delete e[a]),
                    u = e[o],
                    s.isArray(u) ? (t.animatedProperties[o] = u[1], u = e[o] = u[0]) : t.animatedProperties[o] = t.specialEasing && t.specialEasing[o] || t.easing || "swing";
                    if (u === "hide" && r || u === "show" && !r) return t.complete.call(this);
                    n && (o === "height" || o === "width") && (t.overflow = [this.style.overflow, this.style.overflowX, this.style.overflowY], s.css(this, "display") === "inline" && s.css(this, "float") === "none" && (!s.support.inlineBlockNeedsLayout || Sn(this.nodeName) === "inline" ? this.style.display = "inline-block": this.style.zoom = 1))
                }
                t.overflow != null && (this.style.overflow = "hidden");
                for (a in e) f = new s.fx(this, t, a),
                u = e[a],
                dn.test(u) ? (d = s._data(this, "toggle" + a) || (u === "toggle" ? r ? "show": "hide": 0), d ? (s._data(this, "toggle" + a, d === "show" ? "hide": "show"), f[d]()) : f[u]()) : (l = vn.exec(u), c = f.cur(), l ? (h = parseFloat(l[2]), p = l[3] || (s.cssNumber[a] ? "": "px"), p !== "px" && (s.style(this, a, (h || 1) + p), c = (h || 1) / f.cur() * c, s.style(this, a, c + p)), l[1] && (h = (l[1] === "-=" ? -1 : 1) * h + c), f.custom(c, h, p)) : f.custom(c, u, ""));
                return ! 0
            }
            var i = s.speed(t, n, r);
            return s.isEmptyObject(e) ? this.each(i.complete, [!1]) : (e = s.extend({},
            e), i.queue === !1 ? this.each(o) : this.queue(i.queue, o))
        },
        stop: function(e, n, r) {
            return typeof e != "string" && (r = n, n = e, e = t),
            n && e !== !1 && this.queue(e || "fx", []),
            this.each(function() {
                function u(e, t, n) {
                    var i = t[n];
                    s.removeData(e, n, !0),
                    i.stop(r)
                }
                var t, n = !1,
                i = s.timers,
                o = s._data(this);
                r || s._unmark(!0, this);
                if (e == null) for (t in o) o[t] && o[t].stop && t.indexOf(".run") === t.length - 4 && u(this, o, t);
                else o[t = e + ".run"] && o[t].stop && u(this, o, t);
                for (t = i.length; t--;) i[t].elem === this && (e == null || i[t].queue === e) && (r ? i[t](!0) : i[t].saveState(), n = !0, i.splice(t, 1)); (!r || !n) && s.dequeue(this, e)
            })
        }
    }),
    s.each({
        slideDown: En("show", 1),
        slideUp: En("hide", 1),
        slideToggle: En("toggle", 1),
        fadeIn: {
            opacity: "show"
        },
        fadeOut: {
            opacity: "hide"
        },
        fadeToggle: {
            opacity: "toggle"
        }
    },
    function(e, t) {
        s.fn[e] = function(e, n, r) {
            return this.animate(t, e, n, r)
        }
    }),
    s.extend({
        speed: function(e, t, n) {
            var r = e && typeof e == "object" ? s.extend({},
            e) : {
                complete: n || !n && t || s.isFunction(e) && e,
                duration: e,
                easing: n && t || t && !s.isFunction(t) && t
            };
            r.duration = s.fx.off ? 0 : typeof r.duration == "number" ? r.duration: r.duration in s.fx.speeds ? s.fx.speeds[r.duration] : s.fx.speeds._default;
            if (r.queue == null || r.queue === !0) r.queue = "fx";
            return r.old = r.complete,
            r.complete = function(e) {
                s.isFunction(r.old) && r.old.call(this),
                r.queue ? s.dequeue(this, r.queue) : e !== !1 && s._unmark(this)
            },
            r
        },
        easing: {
            linear: function(e, t, n, r) {
                return n + r * e
            },
            swing: function(e, t, n, r) {
                return ( - Math.cos(e * Math.PI) / 2 + .5) * r + n
            }
        },
        timers: [],
        fx: function(e, t, n) {
            this.options = t,
            this.elem = e,
            this.prop = n,
            t.orig = t.orig || {}
        }
    }),
    s.fx.prototype = {
        update: function() {
            this.options.step && this.options.step.call(this.elem, this.now, this),
            (s.fx.step[this.prop] || s.fx.step._default)(this)
        },
        cur: function() {
            if (this.elem[this.prop] == null || !!this.elem.style && this.elem.style[this.prop] != null) {
                var e, t = s.css(this.elem, this.prop);
                return isNaN(e = parseFloat(t)) ? !t || t === "auto" ? 0 : t: e
            }
            return this.elem[this.prop]
        },
        custom: function(e, n, r) {
            function u(e) {
                return i.step(e)
            }
            var i = this,
            o = s.fx;
            this.startTime = yn || bn(),
            this.end = n,
            this.now = this.start = e,
            this.pos = this.state = 0,
            this.unit = r || this.unit || (s.cssNumber[this.prop] ? "": "px"),
            u.queue = this.options.queue,
            u.elem = this.elem,
            u.saveState = function() {
                i.options.hide && s._data(i.elem, "fxshow" + i.prop) === t && s._data(i.elem, "fxshow" + i.prop, i.start)
            },
            u() && s.timers.push(u) && !mn && (mn = setInterval(o.tick, o.interval))
        },
        show: function() {
            var e = s._data(this.elem, "fxshow" + this.prop);
            this.options.orig[this.prop] = e || s.style(this.elem, this.prop),
            this.options.show = !0,
            e !== t ? this.custom(this.cur(), e) : this.custom(this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur()),
            s(this.elem).show()
        },
        hide: function() {
            this.options.orig[this.prop] = s._data(this.elem, "fxshow" + this.prop) || s.style(this.elem, this.prop),
            this.options.hide = !0,
            this.custom(this.cur(), 0)
        },
        step: function(e) {
            var t, n, r, i = yn || bn(),
            o = !0,
            u = this.elem,
            a = this.options;
            if (e || i >= a.duration + this.startTime) {
                this.now = this.end,
                this.pos = this.state = 1,
                this.update(),
                a.animatedProperties[this.prop] = !0;
                for (t in a.animatedProperties) a.animatedProperties[t] !== !0 && (o = !1);
                if (o) {
                    a.overflow != null && !s.support.shrinkWrapBlocks && s.each(["", "X", "Y"],
                    function(e, t) {
                        u.style["overflow" + t] = a.overflow[e]
                    }),
                    a.hide && s(u).hide();
                    if (a.hide || a.show) for (t in a.animatedProperties) s.style(u, t, a.orig[t]),
                    s.removeData(u, "fxshow" + t, !0),
                    s.removeData(u, "toggle" + t, !0);
                    r = a.complete,
                    r && (a.complete = !1, r.call(u))
                }
                return ! 1
            }
            return a.duration == Infinity ? this.now = i: (n = i - this.startTime, this.state = n / a.duration, this.pos = s.easing[a.animatedProperties[this.prop]](this.state, n, 0, 1, a.duration), this.now = this.start + (this.end - this.start) * this.pos),
            this.update(),
            !0
        }
    },
    s.extend(s.fx, {
        tick: function() {
            var e, t = s.timers,
            n = 0;
            for (; n < t.length; n++) e = t[n],
            !e() && t[n] === e && t.splice(n--, 1);
            t.length || s.fx.stop()
        },
        interval: 13,
        stop: function() {
            clearInterval(mn),
            mn = null
        },
        speeds: {
            slow: 600,
            fast: 200,
            _default: 400
        },
        step: {
            opacity: function(e) {
                s.style(e.elem, "opacity", e.now)
            },
            _default: function(e) {
                e.elem.style && e.elem.style[e.prop] != null ? e.elem.style[e.prop] = e.now + e.unit: e.elem[e.prop] = e.now
            }
        }
    }),
    s.each(["width", "height"],
    function(e, t) {
        s.fx.step[t] = function(e) {
            s.style(e.elem, t, Math.max(0, e.now) + e.unit)
        }
    }),
    s.expr && s.expr.filters && (s.expr.filters.animated = function(e) {
        return s.grep(s.timers,
        function(t) {
            return e === t.elem
        }).length
    });
    var xn = /^t(?:able|d|h)$/i,
    Tn = /^(?:body|html)$/i;
    "getBoundingClientRect" in n.documentElement ? s.fn.offset = function(e) {
        var t = this[0],
        n;
        if (e) return this.each(function(t) {
            s.offset.setOffset(this, e, t)
        });
        if (!t || !t.ownerDocument) return null;
        if (t === t.ownerDocument.body) return s.offset.bodyOffset(t);
        try {
            n = t.getBoundingClientRect()
        } catch(r) {}
        var i = t.ownerDocument,
        o = i.documentElement;
        if (!n || !s.contains(o, t)) return n ? {
            top: n.top,
            left: n.left
        }: {
            top: 0,
            left: 0
        };
        var u = i.body,
        a = Nn(i),
        f = o.clientTop || u.clientTop || 0,
        l = o.clientLeft || u.clientLeft || 0,
        c = a.pageYOffset || s.support.boxModel && o.scrollTop || u.scrollTop,
        h = a.pageXOffset || s.support.boxModel && o.scrollLeft || u.scrollLeft,
        p = n.top + c - f,
        d = n.left + h - l;
        return {
            top: p,
            left: d
        }
    }: s.fn.offset = function(e) {
        var t = this[0];
        if (e) return this.each(function(t) {
            s.offset.setOffset(this, e, t)
        });
        if (!t || !t.ownerDocument) return null;
        if (t === t.ownerDocument.body) return s.offset.bodyOffset(t);
        var n, r = t.offsetParent,
        i = t,
        o = t.ownerDocument,
        u = o.documentElement,
        a = o.body,
        f = o.defaultView,
        l = f ? f.getComputedStyle(t, null) : t.currentStyle,
        c = t.offsetTop,
        h = t.offsetLeft;
        while ((t = t.parentNode) && t !== a && t !== u) {
            if (s.support.fixedPosition && l.position === "fixed") break;
            n = f ? f.getComputedStyle(t, null) : t.currentStyle,
            c -= t.scrollTop,
            h -= t.scrollLeft,
            t === r && (c += t.offsetTop, h += t.offsetLeft, s.support.doesNotAddBorder && (!s.support.doesAddBorderForTableAndCells || !xn.test(t.nodeName)) && (c += parseFloat(n.borderTopWidth) || 0, h += parseFloat(n.borderLeftWidth) || 0), i = r, r = t.offsetParent),
            s.support.subtractsBorderForOverflowNotVisible && n.overflow !== "visible" && (c += parseFloat(n.borderTopWidth) || 0, h += parseFloat(n.borderLeftWidth) || 0),
            l = n
        }
        if (l.position === "relative" || l.position === "static") c += a.offsetTop,
        h += a.offsetLeft;
        return s.support.fixedPosition && l.position === "fixed" && (c += Math.max(u.scrollTop, a.scrollTop), h += Math.max(u.scrollLeft, a.scrollLeft)),
        {
            top: c,
            left: h
        }
    },
    s.offset = {
        bodyOffset: function(e) {
            var t = e.offsetTop,
            n = e.offsetLeft;
            return s.support.doesNotIncludeMarginInBodyOffset && (t += parseFloat(s.css(e, "marginTop")) || 0, n += parseFloat(s.css(e, "marginLeft")) || 0),
            {
                top: t,
                left: n
            }
        },
        setOffset: function(e, t, n) {
            var r = s.css(e, "position");
            r === "static" && (e.style.position = "relative");
            var i = s(e),
            o = i.offset(),
            u = s.css(e, "top"),
            a = s.css(e, "left"),
            f = (r === "absolute" || r === "fixed") && s.inArray("auto", [u, a]) > -1,
            l = {},
            c = {},
            h,
            p;
            f ? (c = i.position(), h = c.top, p = c.left) : (h = parseFloat(u) || 0, p = parseFloat(a) || 0),
            s.isFunction(t) && (t = t.call(e, n, o)),
            t.top != null && (l.top = t.top - o.top + h),
            t.left != null && (l.left = t.left - o.left + p),
            "using" in t ? t.using.call(e, l) : i.css(l)
        }
    },
    s.fn.extend({
        position: function() {
            if (!this[0]) return null;
            var e = this[0],
            t = this.offsetParent(),
            n = this.offset(),
            r = Tn.test(t[0].nodeName) ? {
                top: 0,
                left: 0
            }: t.offset();
            return n.top -= parseFloat(s.css(e, "marginTop")) || 0,
            n.left -= parseFloat(s.css(e, "marginLeft")) || 0,
            r.top += parseFloat(s.css(t[0], "borderTopWidth")) || 0,
            r.left += parseFloat(s.css(t[0], "borderLeftWidth")) || 0,
            {
                top: n.top - r.top,
                left: n.left - r.left
            }
        },
        offsetParent: function() {
            return this.map(function() {
                var e = this.offsetParent || n.body;
                while (e && !Tn.test(e.nodeName) && s.css(e, "position") === "static") e = e.offsetParent;
                return e
            })
        }
    }),
    s.each(["Left", "Top"],
    function(e, n) {
        var r = "scroll" + n;
        s.fn[r] = function(n) {
            var i, o;
            return n === t ? (i = this[0], i ? (o = Nn(i), o ? "pageXOffset" in o ? o[e ? "pageYOffset": "pageXOffset"] : s.support.boxModel && o.document.documentElement[r] || o.document.body[r] : i[r]) : null) : this.each(function() {
                o = Nn(this),
                o ? o.scrollTo(e ? s(o).scrollLeft() : n, e ? n: s(o).scrollTop()) : this[r] = n
            })
        }
    }),
    s.each(["Height", "Width"],
    function(e, n) {
        var r = n.toLowerCase();
        s.fn["inner" + n] = function() {
            var e = this[0];
            return e ? e.style ? parseFloat(s.css(e, r, "padding")) : this[r]() : null
        },
        s.fn["outer" + n] = function(e) {
            var t = this[0];
            return t ? t.style ? parseFloat(s.css(t, r, e ? "margin": "border")) : this[r]() : null
        },
        s.fn[r] = function(e) {
            var i = this[0];
            if (!i) return e == null ? null: this;
            if (s.isFunction(e)) return this.each(function(t) {
                var n = s(this);
                n[r](e.call(this, t, n[r]()))
            });
            if (s.isWindow(i)) {
                var o = i.document.documentElement["client" + n],
                u = i.document.body;
                return i.document.compatMode === "CSS1Compat" && o || u && u["client" + n] || o
            }
            if (i.nodeType === 9) return Math.max(i.documentElement["client" + n], i.body["scroll" + n], i.documentElement["scroll" + n], i.body["offset" + n], i.documentElement["offset" + n]);
            if (e === t) {
                var a = s.css(i, r),
                f = parseFloat(a);
                return s.isNumeric(f) ? f: a
            }
            return this.css(r, typeof e == "string" ? e: e + "px")
        }
    }),
    e.jQuery = e.$ = s,
    typeof define == "function" && define.amd && define.amd.jQuery && define("jquery", [],
    function() {
        return s
    })
} (window),
jQuery.easing.jswing = jQuery.easing.swing,
jQuery.extend(jQuery.easing, {
    def: "easeOutQuad",
    swing: function(e, t, n, r, i) {
        return jQuery.easing[jQuery.easing.def](e, t, n, r, i)
    },
    easeInQuad: function(e, t, n, r, i) {
        return r * (t /= i) * t + n
    },
    easeOutQuad: function(e, t, n, r, i) {
        return - r * (t /= i) * (t - 2) + n
    },
    easeInOutQuad: function(e, t, n, r, i) {
        return (t /= i / 2) < 1 ? r / 2 * t * t + n: -r / 2 * (--t * (t - 2) - 1) + n
    },
    easeInCubic: function(e, t, n, r, i) {
        return r * (t /= i) * t * t + n
    },
    easeOutCubic: function(e, t, n, r, i) {
        return r * ((t = t / i - 1) * t * t + 1) + n
    },
    easeInOutCubic: function(e, t, n, r, i) {
        return (t /= i / 2) < 1 ? r / 2 * t * t * t + n: r / 2 * ((t -= 2) * t * t + 2) + n
    },
    easeInQuart: function(e, t, n, r, i) {
        return r * (t /= i) * t * t * t + n
    },
    easeOutQuart: function(e, t, n, r, i) {
        return - r * ((t = t / i - 1) * t * t * t - 1) + n
    },
    easeInOutQuart: function(e, t, n, r, i) {
        return (t /= i / 2) < 1 ? r / 2 * t * t * t * t + n: -r / 2 * ((t -= 2) * t * t * t - 2) + n
    },
    easeInQuint: function(e, t, n, r, i) {
        return r * (t /= i) * t * t * t * t + n
    },
    easeOutQuint: function(e, t, n, r, i) {
        return r * ((t = t / i - 1) * t * t * t * t + 1) + n
    },
    easeInOutQuint: function(e, t, n, r, i) {
        return (t /= i / 2) < 1 ? r / 2 * t * t * t * t * t + n: r / 2 * ((t -= 2) * t * t * t * t + 2) + n
    },
    easeInSine: function(e, t, n, r, i) {
        return - r * Math.cos(t / i * (Math.PI / 2)) + r + n
    },
    easeOutSine: function(e, t, n, r, i) {
        return r * Math.sin(t / i * (Math.PI / 2)) + n
    },
    easeInOutSine: function(e, t, n, r, i) {
        return - r / 2 * (Math.cos(Math.PI * t / i) - 1) + n
    },
    easeInExpo: function(e, t, n, r, i) {
        return t == 0 ? n: r * Math.pow(2, 10 * (t / i - 1)) + n
    },
    easeOutExpo: function(e, t, n, r, i) {
        return t == i ? n + r: r * ( - Math.pow(2, -10 * t / i) + 1) + n
    },
    easeInOutExpo: function(e, t, n, r, i) {
        return t == 0 ? n: t == i ? n + r: (t /= i / 2) < 1 ? r / 2 * Math.pow(2, 10 * (t - 1)) + n: r / 2 * ( - Math.pow(2, -10 * --t) + 2) + n
    },
    easeInCirc: function(e, t, n, r, i) {
        return - r * (Math.sqrt(1 - (t /= i) * t) - 1) + n
    },
    easeOutCirc: function(e, t, n, r, i) {
        return r * Math.sqrt(1 - (t = t / i - 1) * t) + n
    },
    easeInOutCirc: function(e, t, n, r, i) {
        return (t /= i / 2) < 1 ? -r / 2 * (Math.sqrt(1 - t * t) - 1) + n: r / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + n
    },
    easeInElastic: function(e, t, n, r, i) {
        var s = 1.70158,
        o = 0,
        u = r;
        if (t == 0) return n;
        if ((t /= i) == 1) return n + r;
        o || (o = i * .3);
        if (u < Math.abs(r)) {
            u = r;
            var s = o / 4
        } else var s = o / (2 * Math.PI) * Math.asin(r / u);
        return - (u * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * i - s) * 2 * Math.PI / o)) + n
    },
    easeOutElastic: function(e, t, n, r, i) {
        var s = 1.70158,
        o = 0,
        u = r;
        if (t == 0) return n;
        if ((t /= i) == 1) return n + r;
        o || (o = i * .3);
        if (u < Math.abs(r)) {
            u = r;
            var s = o / 4
        } else var s = o / (2 * Math.PI) * Math.asin(r / u);
        return u * Math.pow(2, -10 * t) * Math.sin((t * i - s) * 2 * Math.PI / o) + r + n
    },
    easeInOutElastic: function(e, t, n, r, i) {
        var s = 1.70158,
        o = 0,
        u = r;
        if (t == 0) return n;
        if ((t /= i / 2) == 2) return n + r;
        o || (o = i * .3 * 1.5);
        if (u < Math.abs(r)) {
            u = r;
            var s = o / 4
        } else var s = o / (2 * Math.PI) * Math.asin(r / u);
        return t < 1 ? -0.5 * u * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * i - s) * 2 * Math.PI / o) + n: u * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * i - s) * 2 * Math.PI / o) * .5 + r + n
    },
    easeInBack: function(e, t, n, r, i, s) {
        return s == undefined && (s = 1.70158),
        r * (t /= i) * t * ((s + 1) * t - s) + n
    },
    easeOutBack: function(e, t, n, r, i, s) {
        return s == undefined && (s = 1.70158),
        r * ((t = t / i - 1) * t * ((s + 1) * t + s) + 1) + n
    },
    easeInOutBack: function(e, t, n, r, i, s) {
        return s == undefined && (s = 1.70158),
        (t /= i / 2) < 1 ? r / 2 * t * t * (((s *= 1.525) + 1) * t - s) + n: r / 2 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2) + n
    },
    easeInBounce: function(e, t, n, r, i) {
        return r - jQuery.easing.easeOutBounce(e, i - t, 0, r, i) + n
    },
    easeOutBounce: function(e, t, n, r, i) {
        return (t /= i) < 1 / 2.75 ? r * 7.5625 * t * t + n: t < 2 / 2.75 ? r * (7.5625 * (t -= 1.5 / 2.75) * t + .75) + n: t < 2.5 / 2.75 ? r * (7.5625 * (t -= 2.25 / 2.75) * t + .9375) + n: r * (7.5625 * (t -= 2.625 / 2.75) * t + .984375) + n
    },
    easeInOutBounce: function(e, t, n, r, i) {
        return t < i / 2 ? jQuery.easing.easeInBounce(e, t * 2, 0, r, i) * .5 + n: jQuery.easing.easeOutBounce(e, t * 2 - i, 0, r, i) * .5 + r * .5 + n
    }
}),
window.Modernizr = function(e, t, n) {
    function k(e) {
        l.cssText = e
    }
    function L(e, t) {
        return k(d.join(e + ";") + (t || ""))
    }
    function A(e, t) {
        return typeof e === t
    }
    function O(e, t) {
        return !! ~ ("" + e).indexOf(t)
    }
    function M(e, t) {
        for (var r in e) if (l[e[r]] !== n) return t == "pfx" ? e[r] : !0;
        return ! 1
    }
    function _(e, t) {
        var n = e.charAt(0).toUpperCase() + e.substr(1),
        r = (e + " " + v.join(n + " ") + n).split(" ");
        return M(r, t)
    }
    function P() {
        i.input = function(e) {
            for (var t = 0,
            n = e.length; t < n; t++) b[e[t]] = e[t] in c;
            return b
        } ("autocomplete autofocus list placeholder max min multiple pattern required step".split(" ")),
        i.inputtypes = function(e) {
            for (var r = 0,
            i, s, u, a = e.length; r < a; r++) c.setAttribute("type", s = e[r]),
            i = c.type !== "text",
            i && (c.value = h, c.style.cssText = "position:absolute;visibility:hidden;", /^range$/.test(s) && c.style.WebkitAppearance !== n ? (o.appendChild(c), u = t.defaultView, i = u.getComputedStyle && u.getComputedStyle(c, null).WebkitAppearance !== "textfield" && c.offsetHeight !== 0, o.removeChild(c)) : /^(search|tel)$/.test(s) || (/^(url|email)$/.test(s) ? i = c.checkValidity && c.checkValidity() === !1 : /^color$/.test(s) ? (o.appendChild(c), o.offsetWidth, i = c.value != h, o.removeChild(c)) : i = c.value != h)),
            y[e[r]] = !!i;
            return y
        } ("search tel url email datetime date month week time datetime-local number range color".split(" "))
    }
    var r = "2.0.4",
    i = {},
    s = !0,
    o = t.documentElement,
    u = t.head || t.getElementsByTagName("head")[0],
    a = "modernizr",
    f = t.createElement(a),
    l = f.style,
    c = t.createElement("input"),
    h = ":)",
    p = Object.prototype.toString,
    d = " -webkit- -moz- -o- -ms- -khtml- ".split(" "),
    v = "Webkit Moz O ms Khtml".split(" "),
    m = {
        svg: "http://www.w3.org/2000/svg"
    },
    g = {},
    y = {},
    b = {},
    w = [],
    E,
    S = function(e, n, r, i) {
        var s, u, f, l = t.createElement("div");
        if (parseInt(r, 10)) while (r--) f = t.createElement("div"),
        f.id = i ? i[r] : a + (r + 1),
        l.appendChild(f);
        return s = ["&shy;", "<style>", e, "</style>"].join(""),
        l.id = a,
        l.innerHTML += s,
        o.appendChild(l),
        u = n(l, e),
        l.parentNode.removeChild(l),
        !!u
    },
    x = function(t) {
        if (e.matchMedia) return matchMedia(t).matches;
        var n;
        return S("@media " + t + " { #" + a + " { position: absolute; } }",
        function(t) {
            n = (e.getComputedStyle ? getComputedStyle(t, null) : t.currentStyle)["position"] == "absolute"
        }),
        n
    },
    T = function() {
        function r(r, i) {
            i = i || t.createElement(e[r] || "div"),
            r = "on" + r;
            var s = r in i;
            return s || (i.setAttribute || (i = t.createElement("div")), i.setAttribute && i.removeAttribute && (i.setAttribute(r, ""), s = A(i[r], "function"), A(i[r], n) || (i[r] = n), i.removeAttribute(r))),
            i = null,
            s
        }
        var e = {
            select: "input",
            change: "input",
            submit: "form",
            reset: "form",
            error: "img",
            load: "img",
            abort: "img"
        };
        return r
    } (),
    N = {}.hasOwnProperty,
    C; ! A(N, n) && !A(N.call, n) ? C = function(e, t) {
        return N.call(e, t)
    }: C = function(e, t) {
        return t in e && A(e.constructor.prototype[t], n)
    };
    var D = function(n, r) {
        var s = n.join(""),
        o = r.length;
        S(s,
        function(n, r) {
            var s = t.styleSheets[t.styleSheets.length - 1],
            u = s.cssRules && s.cssRules[0] ? s.cssRules[0].cssText: s.cssText || "",
            a = n.childNodes,
            f = {};
            while (o--) f[a[o].id] = a[o];
            i.touch = "ontouchstart" in e || f.touch.offsetTop === 9,
            i.csstransforms3d = f.csstransforms3d.offsetLeft === 9,
            i.generatedcontent = f.generatedcontent.offsetHeight >= 1,
            i.fontface = /src/i.test(u) && u.indexOf(r.split(" ")[0]) === 0
        },
        o, r)
    } (['@font-face {font-family:"font";src:url("https://")}', ["@media (", d.join("touch-enabled),("), a, ")", "{#touch{top:9px;position:absolute}}"].join(""), ["@media (", d.join("transform-3d),("), a, ")", "{#csstransforms3d{left:9px;position:absolute}}"].join(""), ['#generatedcontent:after{content:"', h, '"}'].join("")], ["fontface", "touch", "csstransforms3d", "generatedcontent"]);
    g.flexbox = function() {
        function e(e, t, n, r) {
            t += ":",
            e.style.cssText = (t + d.join(n + ";" + t)).slice(0, -t.length) + (r || "")
        }
        function n(e, t, n, r) {
            e.style.cssText = d.join(t + ":" + n + ";") + (r || "")
        }
        var r = t.createElement("div"),
        i = t.createElement("div");
        e(r, "display", "box", "width:42px;padding:0;"),
        n(i, "box-flex", "1", "width:10px;"),
        r.appendChild(i),
        o.appendChild(r);
        var s = i.offsetWidth === 42;
        return r.removeChild(i),
        o.removeChild(r),
        s
    },
    g.canvas = function() {
        var e = t.createElement("canvas");
        return !! e.getContext && !!e.getContext("2d")
    },
    g.canvastext = function() {
        return !! i.canvas && !!A(t.createElement("canvas").getContext("2d").fillText, "function")
    },
    g.webgl = function() {
        return !! e.WebGLRenderingContext
    },
    g.touch = function() {
        return i.touch
    },
    g.geolocation = function() {
        return !! navigator.geolocation
    },
    g.postmessage = function() {
        return !! e.postMessage
    },
    g.websqldatabase = function() {
        var t = !!e.openDatabase;
        return t
    },
    g.indexedDB = function() {
        for (var t = -1,
        n = v.length; ++t < n;) if (e[v[t].toLowerCase() + "IndexedDB"]) return ! 0;
        return !! e.indexedDB
    },
    g.hashchange = function() {
        return T("hashchange", e) && (t.documentMode === n || t.documentMode > 7)
    },
    g.history = function() {
        return !! e.history && !!history.pushState
    },
    g.draganddrop = function() {
        return T("dragstart") && T("drop")
    },
    g.websockets = function() {
        for (var t = -1,
        n = v.length; ++t < n;) if (e[v[t] + "WebSocket"]) return ! 0;
        return "WebSocket" in e
    },
    g.rgba = function() {
        return k("background-color:rgba(150,255,150,.5)"),
        O(l.backgroundColor, "rgba")
    },
    g.hsla = function() {
        return k("background-color:hsla(120,40%,100%,.5)"),
        O(l.backgroundColor, "rgba") || O(l.backgroundColor, "hsla")
    },
    g.multiplebgs = function() {
        return k("background:url(https://),url(https://),red url(https://)"),
        /(url\s*\(.*?){3}/.test(l.background)
    },
    g.backgroundsize = function() {
        return _("backgroundSize")
    },
    g.borderimage = function() {
        return _("borderImage")
    },
    g.borderradius = function() {
        return _("borderRadius")
    },
    g.boxshadow = function() {
        return _("boxShadow")
    },
    g.textshadow = function() {
        return t.createElement("div").style.textShadow === ""
    },
    g.opacity = function() {
        return L("opacity:.55"),
        /^0.55$/.test(l.opacity)
    },
    g.cssanimations = function() {
        return _("animationName")
    },
    g.csscolumns = function() {
        return _("columnCount")
    },
    g.cssgradients = function() {
        var e = "background-image:",
        t = "gradient(linear,left top,right bottom,from(#9f9),to(white));",
        n = "linear-gradient(left top,#9f9, white);";
        return k((e + d.join(t + e) + d.join(n + e)).slice(0, -e.length)),
        O(l.backgroundImage, "gradient")
    },
    g.cssreflections = function() {
        return _("boxReflect")
    },
    g.csstransforms = function() {
        return !! M(["transformProperty", "WebkitTransform", "MozTransform", "OTransform", "msTransform"])
    },
    g.csstransforms3d = function() {
        var e = !!M(["perspectiveProperty", "WebkitPerspective", "MozPerspective", "OPerspective", "msPerspective"]);
        return e && "webkitPerspective" in o.style && (e = i.csstransforms3d),
        e
    },
    g.csstransitions = function() {
        return _("transitionProperty")
    },
    g.fontface = function() {
        return i.fontface
    },
    g.generatedcontent = function() {
        return i.generatedcontent
    },
    g.video = function() {
        var e = t.createElement("video"),
        n = !1;
        try {
            if (n = !!e.canPlayType) {
                n = new Boolean(n),
                n.ogg = e.canPlayType('video/ogg; codecs="theora"');
                var r = 'video/mp4; codecs="avc1.42E01E';
                n.h264 = e.canPlayType(r + '"') || e.canPlayType(r + ', mp4a.40.2"'),
                n.webm = e.canPlayType('video/webm; codecs="vp8, vorbis"')
            }
        } catch(i) {}
        return n
    },
    g.audio = function() {
        var e = t.createElement("audio"),
        n = !1;
        try {
            if (n = !!e.canPlayType) n = new Boolean(n),
            n.ogg = e.canPlayType('audio/ogg; codecs="vorbis"'),
            n.mp3 = e.canPlayType("audio/mpeg;"),
            n.wav = e.canPlayType('audio/wav; codecs="1"'),
            n.m4a = e.canPlayType("audio/x-m4a;") || e.canPlayType("audio/aac;")
        } catch(r) {}
        return n
    },
    g.localstorage = function() {
        try {
            return !! localStorage.getItem
        } catch(e) {
            return ! 1
        }
    },
    g.sessionstorage = function() {
        try {
            return !! sessionStorage.getItem
        } catch(e) {
            return ! 1
        }
    },
    g.webworkers = function() {
        return !! e.Worker
    },
    g.applicationcache = function() {
        return !! e.applicationCache
    },
    g.svg = function() {
        return !! t.createElementNS && !!t.createElementNS(m.svg, "svg").createSVGRect
    },
    g.inlinesvg = function() {
        var e = t.createElement("div");
        return e.innerHTML = "<svg/>",
        (e.firstChild && e.firstChild.namespaceURI) == m.svg
    },
    g.smil = function() {
        return !! t.createElementNS && /SVG/.test(p.call(t.createElementNS(m.svg, "animate")))
    },
    g.svgclippaths = function() {
        return !! t.createElementNS && /SVG/.test(p.call(t.createElementNS(m.svg, "clipPath")))
    };
    for (var H in g) C(g, H) && (E = H.toLowerCase(), i[E] = g[H](), w.push((i[E] ? "": "no-") + E));
    return i.input || P(),
    i.addTest = function(e, t) {
        if (typeof e == "object") for (var r in e) C(e, r) && i.addTest(r, e[r]);
        else {
            e = e.toLowerCase();
            if (i[e] !== n) return;
            t = typeof t == "boolean" ? t: !!t(),
            o.className += " " + (t ? "": "no-") + e,
            i[e] = t
        }
        return i
    },
    k(""),
    f = c = null,
    e.attachEvent &&
    function() {
        var e = t.createElement("div");
        return e.innerHTML = "<elem></elem>",
        e.childNodes.length !== 1
    } () &&
    function(e, t) {
        function y(e) {
            var t = -1;
            while (++t < o) e.createElement(s[t])
        }
        e.iepp = e.iepp || {};
        var r = e.iepp,
        i = r.html5elements || "abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
        s = i.split("|"),
        o = s.length,
        u = new RegExp("(^|\\s)(" + i + ")", "gi"),
        a = new RegExp("<(/*)(" + i + ")", "gi"),
        f = /^\s*[\{\}]\s*$/,
        l = new RegExp("(^|[^\\n]*?\\s)(" + i + ")([^\\n]*)({[\\n\\w\\W]*?})", "gi"),
        c = t.createDocumentFragment(),
        h = t.documentElement,
        p = h.firstChild,
        d = t.createElement("body"),
        v = t.createElement("style"),
        m = /print|all/,
        g;
        r.getCSS = function(e, t) {
            if (e + "" === n) return "";
            var i = -1,
            s = e.length,
            o, u = [];
            while (++i < s) {
                o = e[i];
                if (o.disabled) continue;
                t = o.media || t,
                m.test(t) && u.push(r.getCSS(o.imports, t), o.cssText),
                t = "all"
            }
            return u.join("")
        },
        r.parseCSS = function(e) {
            var t = [],
            n;
            while ((n = l.exec(e)) != null) t.push(((f.exec(n[1]) ? "\n": n[1]) + n[2] + n[3]).replace(u, "$1.iepp_$2") + n[4]);
            return t.join("\n")
        },
        r.writeHTML = function() {
            var e = -1;
            g = g || t.body;
            while (++e < o) {
                var n = t.getElementsByTagName(s[e]),
                r = n.length,
                i = -1;
                while (++i < r) n[i].className.indexOf("iepp_") < 0 && (n[i].className += " iepp_" + s[e])
            }
            c.appendChild(g),
            h.appendChild(d),
            d.className = g.className,
            d.id = g.id,
            d.innerHTML = g.innerHTML.replace(a, "<$1font")
        },
        r._beforePrint = function() {
            v.styleSheet.cssText = r.parseCSS(r.getCSS(t.styleSheets, "all")),
            r.writeHTML()
        },
        r.restoreHTML = function() {
            d.innerHTML = "",
            h.removeChild(d),
            h.appendChild(g)
        },
        r._afterPrint = function() {
            r.restoreHTML(),
            v.styleSheet.cssText = ""
        },
        y(t),
        y(c);
        if (r.disablePP) return;
        p.insertBefore(v, p.firstChild),
        v.media = "print",
        v.className = "iepp-printshim",
        e.attachEvent("onbeforeprint", r._beforePrint),
        e.attachEvent("onafterprint", r._afterPrint)
    } (e, t),
    i._version = r,
    i._prefixes = d,
    i._domPrefixes = v,
    i.mq = x,
    i.hasEvent = T,
    i.testProp = function(e) {
        return M([e])
    },
    i.testAllProps = _,
    i.testStyles = S,
    i.prefixed = function(e) {
        return _(e, "pfx")
    },
    o.className = o.className.replace(/\bno-js\b/, "") + (s ? " js " + w.join(" ") : ""),
    i
} (this, this.document),
function(e) {
    function n(e, t, n, r, i) {
        this._listener = t,
        this._isOnce = n,
        this.context = r,
        this._signal = e,
        this._priority = i || 0
    }
    var t = {
        VERSION: "0.6.1"
    };
    n.prototype = {
        active: !0,
        execute: function(e) {
            var t;
            return this.active && (t = this._listener.apply(this.context, e), this._isOnce && this.detach()),
            t
        },
        detach: function() {
            return this._signal.remove(this._listener)
        },
        getListener: function() {
            return this._listener
        },
        dispose: function() {
            this.detach(),
            this._destroy()
        },
        _destroy: function() {
            delete this._signal,
            delete this._isOnce,
            delete this._listener,
            delete this.context
        },
        isOnce: function() {
            return this._isOnce
        },
        toString: function() {
            return "[SignalBinding isOnce: " + this._isOnce + ", active: " + this.active + "]"
        }
    },
    t.Signal = function() {
        this._bindings = []
    },
    t.Signal.prototype = {
        _shouldPropagate: !0,
        active: !0,
        _registerListener: function(e, t, r, i) {
            if (typeof e != "function") throw new Error("listener is a required param of add() and addOnce() and should be a Function.");
            var s = this._indexOfListener(e),
            o;
            if (s !== -1) {
                o = this._bindings[s];
                if (o.isOnce() !== t) throw new Error("You cannot add" + (t ? "": "Once") + "() then add" + (t ? "Once": "") + "() the same listener without removing the relationship first.")
            } else o = new n(this, e, t, r, i),
            this._addBinding(o);
            return o
        },
        _addBinding: function(e) {
            var t = this._bindings.length;
            do--t;
            while (this._bindings[t] && e._priority <= this._bindings[t]._priority);
            this._bindings.splice(t + 1, 0, e)
        },
        _indexOfListener: function(e) {
            var t = this._bindings.length;
            while (t--) if (this._bindings[t]._listener === e) return t;
            return - 1
        },
        add: function(e, t, n) {
            return this._registerListener(e, !1, t, n)
        },
        addOnce: function(e, t, n) {
            return this._registerListener(e, !0, t, n)
        },
        remove: function(e) {
            if (typeof e != "function") throw new Error("listener is a required param of remove() and should be a Function.");
            var t = this._indexOfListener(e);
            return t !== -1 && (this._bindings[t]._destroy(), this._bindings.splice(t, 1)),
            e
        },
        removeAll: function() {
            var e = this._bindings.length;
            while (e--) this._bindings[e]._destroy();
            this._bindings.length = 0
        },
        getNumListeners: function() {
            return this._bindings.length
        },
        halt: function() {
            this._shouldPropagate = !1
        },
        dispatch: function(e) {
            if (!this.active) return;
            var t = Array.prototype.slice.call(arguments),
            n = this._bindings.slice(),
            r = this._bindings.length;
            this._shouldPropagate = !0;
            do r--;
            while (n[r] && this._shouldPropagate && n[r].execute(t) !== !1)
        },
        dispose: function() {
            this.removeAll(),
            delete this._bindings
        },
        toString: function() {
            return "[Signal active: " + this.active + " numListeners: " + this.getNumListeners() + "]"
        }
    },
    e.signals = t
} (window || global || this),
function(e) {
    typeof define == "function" ? define(function() {
        e()
    }) : e()
} (function(e) {
    if (!Function.prototype.bind) {
        var t = Array.prototype.slice;
        Function.prototype.bind = function() {
            function e() {
                if (this instanceof e) {
                    var i = Object.create(n.prototype);
                    return n.apply(i, r.concat(t.call(arguments))),
                    i
                }
                return n.call.apply(n, r.concat(t.call(arguments)))
            }
            var n = this;
            if (typeof n.apply != "function" || typeof n.call != "function") return new TypeError;
            var r = t.call(arguments);
            return e.length = typeof n == "function" ? Math.max(n.length - r.length, 0) : 0,
            e
        }
    }
    var n = Function.prototype.call,
    r = Object.prototype,
    i = n.bind(r.hasOwnProperty),
    s,
    o,
    u,
    a,
    f;
    if (f = i(r, "__defineGetter__")) s = n.bind(r.__defineGetter__),
    o = n.bind(r.__defineSetter__),
    u = n.bind(r.__lookupGetter__),
    a = n.bind(r.__lookupSetter__);
    Array.isArray || (Array.isArray = function(e) {
        return Object.prototype.toString.call(e) === "[object Array]"
    }),
    Array.prototype.forEach || (Array.prototype.forEach = function(e, t) {
        for (var n = +this.length,
        r = 0; r < n; r++) r in this && e.call(t, this[r], r, this)
    }),
    Array.prototype.map || (Array.prototype.map = function(e, t) {
        var n = +this.length;
        if (typeof e != "function") throw new TypeError;
        for (var r = Array(n), i = 0; i < n; i++) i in this && (r[i] = e.call(t, this[i], i, this));
        return r
    }),
    Array.prototype.filter || (Array.prototype.filter = function(e, t) {
        for (var n = [], r = 0; r < this.length; r++) e.call(t, this[r]) && n.push(this[r]);
        return n
    }),
    Array.prototype.every || (Array.prototype.every = function(e, t) {
        for (var n = 0; n < this.length; n++) if (!e.call(t, this[n])) return ! 1;
        return ! 0
    }),
    Array.prototype.some || (Array.prototype.some = function(e, t) {
        for (var n = 0; n < this.length; n++) if (e.call(t, this[n])) return ! 0;
        return ! 1
    }),
    Array.prototype.reduce || (Array.prototype.reduce = function(e) {
        var t = +this.length;
        if (typeof e != "function") throw new TypeError;
        if (t === 0 && arguments.length === 1) throw new TypeError;
        var n = 0;
        if (arguments.length >= 2) var r = arguments[1];
        else do {
            if (n in this) {
                r = this[n++];
                break
            }
            if (++n >= t) throw new TypeError
        } while ( 1 );
        for (; n < t; n++) n in this && (r = e.call(null, r, this[n], n, this));
        return r
    }),
    Array.prototype.reduceRight || (Array.prototype.reduceRight = function(e) {
        var t = +this.length;
        if (typeof e != "function") throw new TypeError;
        if (t === 0 && arguments.length === 1) throw new TypeError;
        var n;
        t -= 1;
        if (arguments.length >= 2) n = arguments[1];
        else do {
            if (t in this) {
                n = this[t--];
                break
            }
            if (--t < 0) throw new TypeError
        } while ( 1 );
        for (; t >= 0; t--) t in this && (n = e.call(null, n, this[t], t, this));
        return n
    }),
    Array.prototype.indexOf || (Array.prototype.indexOf = function(e, t) {
        var n = this.length;
        if (!n) return - 1;
        var r = t || 0;
        if (r >= n) return - 1;
        for (r < 0 && (r += n); r < n; r++) if (r in this && e === this[r]) return r;
        return - 1
    }),
    Array.prototype.lastIndexOf || (Array.prototype.lastIndexOf = function(e, t) {
        var n = this.length;
        if (!n) return - 1;
        var r = t || n;
        r < 0 && (r += n);
        for (r = Math.min(r, n - 1); r >= 0; r--) if (r in this && e === this[r]) return r;
        return - 1
    }),
    Object.getPrototypeOf || (Object.getPrototypeOf = function(e) {
        return e.__proto__ || e.constructor.prototype
    }),
    Object.getOwnPropertyDescriptor || (Object.getOwnPropertyDescriptor = function(t, n) {
        if (typeof t != "object" && typeof t != "function" || t === null) throw new TypeError("Object.getOwnPropertyDescriptor called on a non-object: " + t);
        if (!i(t, n)) return e;
        var s, o, l;
        s = {
            enumerable: !0,
            configurable: !0
        };
        if (f) {
            var c = t.__proto__;
            t.__proto__ = r,
            o = u(t, n),
            l = a(t, n),
            t.__proto__ = c;
            if (o || l) return o && (s.get = o),
            l && (s.set = l),
            s
        }
        return s.value = t[n],
        s
    }),
    Object.getOwnPropertyNames || (Object.getOwnPropertyNames = function(e) {
        return Object.keys(e)
    }),
    Object.create || (Object.create = function(e, t) {
        var n;
        if (e === null) n = {
            __proto__: null
        };
        else {
            if (typeof e != "object") throw new TypeError("typeof prototype[" + typeof e + "] != 'object'");
            n = function() {},
            n.prototype = e,
            n = new n,
            n.__proto__ = e
        }
        return typeof t != "undefined" && Object.defineProperties(n, t),
        n
    }),
    Object.defineProperty || (Object.defineProperty = function(e, t, n) {
        if (typeof e != "object" && typeof e != "function") throw new TypeError("Object.defineProperty called on non-object: " + e);
        if (typeof n != "object" || n === null) throw new TypeError("Property description must be an object: " + n);
        if (i(n, "value")) f && (u(e, t) || a(e, t)) && (e.__proto__ = r, delete e[t]),
        e[t] = n.value;
        else {
            if (!f) throw new TypeError("getters & setters can not be defined on this javascript engine");
            i(n, "get") && s(e, t, n.get),
            i(n, "set") && o(e, t, n.set)
        }
        return e
    }),
    Object.defineProperties || (Object.defineProperties = function(e, t) {
        for (var n in t) i(t, n) && Object.defineProperty(e, n, t[n]);
        return e
    }),
    Object.seal || (Object.seal = function(e) {
        return e
    }),
    Object.freeze || (Object.freeze = function(e) {
        return e
    });
    try {
        Object.freeze(function() {})
    } catch(l) {
        Object.freeze = function(e) {
            return function(t) {
                return typeof t == "function" ? t: e(t)
            }
        } (Object.freeze)
    }
    Object.preventExtensions || (Object.preventExtensions = function(e) {
        return e
    }),
    Object.isSealed || (Object.isSealed = function() {
        return ! 1
    }),
    Object.isFrozen || (Object.isFrozen = function() {
        return ! 1
    }),
    Object.isExtensible || (Object.isExtensible = function() {
        return ! 0
    });
    if (!Object.keys) {
        var c = !0,
        h = ["toString", "toLocaleString", "valueOf", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "constructor"],
        p = h.length,
        d;
        for (d in {
            toString: null
        }) c = !1;
        Object.keys = function g(e) {
            if (typeof e != "object" && typeof e != "function" || e === null) throw new TypeError("Object.keys called on a non-object");
            var g = [],
            t;
            for (t in e) i(e, t) && g.push(t);
            if (c) for (t = 0; t < p; t++) {
                var n = h[t];
                i(e, n) && g.push(n)
            }
            return g
        }
    }
    Date.prototype.toISOString || (Date.prototype.toISOString = function() {
        return this.getUTCFullYear() + "-" + (this.getUTCMonth() + 1) + "-" + this.getUTCDate() + "T" + this.getUTCHours() + ":" + this.getUTCMinutes() + ":" + this.getUTCSeconds() + "Z"
    }),
    Date.now || (Date.now = function() {
        return (new Date).getTime()
    }),
    Date.prototype.toJSON || (Date.prototype.toJSON = function() {
        if (typeof this.toISOString != "function") throw new TypeError;
        return this.toISOString()
    }),
    isNaN(Date.parse("T00:00")) && (Date = function(t) {
        var n = function(e, r, i, s, o, u, a) {
            var f = arguments.length;
            return this instanceof t ? (f = f === 1 && String(e) === e ? new t(n.parse(e)) : f >= 7 ? new t(e, r, i, s, o, u, a) : f >= 6 ? new t(e, r, i, s, o, u) : f >= 5 ? new t(e, r, i, s, o) : f >= 4 ? new t(e, r, i, s) : f >= 3 ? new t(e, r, i) : f >= 2 ? new t(e, r) : f >= 1 ? new t(e) : new t, f.constructor = n, f) : t.apply(this, arguments)
        },
        r = RegExp("^(?:((?:[+-]\\d\\d)?\\d\\d\\d\\d)(?:-(\\d\\d)(?:-(\\d\\d))?)?)?(?:T(\\d\\d):(\\d\\d)(?::(\\d\\d)(?:\\.(\\d\\d\\d))?)?)?(?:Z|([+-])(\\d\\d):(\\d\\d))?$"),
        i;
        for (i in t) n[i] = t[i];
        return n.now = t.now,
        n.UTC = t.UTC,
        n.prototype = t.prototype,
        n.prototype.constructor = n,
        n.parse = function(n) {
            var i = r.exec(n);
            if (i) {
                i.shift();
                for (var s = i[0] === e, o = 0; o < 10; o++) o !== 7 && (i[o] = +(i[o] || (o < 3 ? 1 : 0)), o === 1 && i[o]--);
                return s ? ((i[3] * 60 + i[4]) * 60 + i[5]) * 1e3 + i[6] : (s = (i[8] * 60 + i[9]) * 6e4, i[6] === "-" && (s = -s), t.UTC.apply(this, i.slice(0, 7)) + s)
            }
            return t.parse.apply(this, arguments)
        },
        n
    } (Date));
    if (!String.prototype.trim) {
        var v = /^\s\s*/,
        m = /\s\s*$/;
        String.prototype.trim = function() {
            return String(this).replace(v, "").replace(m, "")
        }
    }
}),
function(e, t, n) {
    function u(e) {
        return function() {
            return this[e]
        }
    }
    function f(e, t, n) {
        var r = 2 < arguments.length ? Array.prototype.slice.call(arguments, 2) : [];
        return function() {
            return r.push.apply(r, arguments),
            t.apply(e, r)
        }
    }
    function l(e) {
        this.F = e,
        this.U = r
    }
    function c(e, n, r) {
        e = e.F.getElementsByTagName(n)[0],
        e || (e = t.documentElement),
        e && e.lastChild && e.insertBefore(r, e.lastChild)
    }
    function h(e) {
        function n() {
            t.body ? e() : setTimeout(n, 0)
        }
        n()
    }
    function p(e) {
        e.parentNode && e.parentNode.removeChild(e)
    }
    function d(e, t) {
        return e.createElement("link", {
            rel: "stylesheet",
            href: t
        })
    }
    function v(e, t) {
        return e.createElement("script", {
            src: t
        })
    }
    function m(e, t) {
        for (var n = e.className.split(/\s+/), r = 0, i = n.length; r < i; r++) if (n[r] == t) return;
        n.push(t),
        e.className = n.join(" ").replace(/^\s+/, "")
    }
    function g(e, t) {
        for (var n = e.className.split(/\s+/), r = [], i = 0, s = n.length; i < s; i++) n[i] != t && r.push(n[i]);
        e.className = r.join(" ").replace(/^\s+/, "").replace(/\s+$/, "")
    }
    function y(e, t) {
        for (var n = e.className.split(/\s+/), r = 0, s = n.length; r < s; r++) if (n[r] == t) return i;
        return o
    }
    function b(e, t, n) {
        if (e.U === r) {
            var i = e.F.createElement("p");
            i.innerHTML = '<a style="top:1px;">w</a>',
            e.U = /top/.test(i.getElementsByTagName("a")[0].getAttribute("style"))
        }
        e.U ? t.setAttribute("style", n) : t.style.cssText = n
    }
    function w(e, t, n, r, i, s, o, u) {
        this.za = e,
        this.Fa = t,
        this.na = n,
        this.ma = r,
        this.Ca = i,
        this.Ba = s,
        this.la = o,
        this.Ga = u
    }
    function E(e, t) {
        this.a = e,
        this.k = t
    }
    function x(e) {
        var t = C(e.a, /(iPod|iPad|iPhone|Android)/, 1);
        return "" != t ? t: (e = C(e.a, /(Linux|Mac_PowerPC|Macintosh|Windows|CrOS)/, 1), "" != e ? ("Mac_PowerPC" == e && (e = "Macintosh"), e) : "Unknown")
    }
    function T(e) {
        var t = C(e.a, /(OS X|Windows NT|Android|CrOS) ([^;)]+)/, 2);
        return t || (t = C(e.a, /(iPhone )?OS ([\d_]+)/, 2)) ? t: (e = C(e.a, /Linux ([i\d]+)/, 1)) ? e: "Unknown"
    }
    function N(e) {
        return e = C(e, /(\d+)/, 1),
        "" != e ? parseInt(e, 10) : -1
    }
    function C(e, t, n) {
        return (e = e.match(t)) && e[n] ? e[n] : ""
    }
    function k(e) {
        if (e.documentMode) return e.documentMode
    }
    function L(e, t, n) {
        this.c = e,
        this.g = t,
        this.V = n,
        this.j = "wf",
        this.h = new W("-")
    }
    function A(e) {
        m(e.g, e.h.e(e.j, "loading")),
        M(e, "loading")
    }
    function O(e) {
        g(e.g, e.h.e(e.j, "loading")),
        y(e.g, e.h.e(e.j, "active")) || m(e.g, e.h.e(e.j, "inactive")),
        M(e, "inactive")
    }
    function M(e, t, n, r) {
        e.V[t] && e.V[t](n, r)
    }
    function _() {
        this.ea = {}
    }
    function D(e, t) {
        var n = [],
        r;
        for (r in t) if (t.hasOwnProperty(r)) {
            var i = e.ea[r];
            i && n.push(i(t[r]))
        }
        return n
    }
    function P(e, t, n, r, i) {
        this.c = e,
        this.A = t,
        this.n = n,
        this.u = r,
        this.D = i,
        this.L = 0,
        this.ia = this.da = o
    }
    function H(e) {
        0 == --e.L && e.da && (e.ia ? (e = e.A, g(e.g, e.h.e(e.j, "loading")), g(e.g, e.h.e(e.j, "inactive")), m(e.g, e.h.e(e.j, "active")), M(e, "active")) : O(e.A))
    }
    function B(e, t, n, r, i, s, o, u, a) {
        this.I = e,
        this.Z = t,
        this.c = n,
        this.n = r,
        this.u = i,
        this.D = s,
        this.ya = new X,
        this.v = new V,
        this.M = o,
        this.B = u,
        this.qa = a || "BESbswy",
        this.P = I(this, "arial,'URW Gothic L',sans-serif"),
        this.Q = I(this, "Georgia,'Century Schoolbook L',serif"),
        this.ba = this.P,
        this.ca = this.Q,
        this.R = q(this, "arial,'URW Gothic L',sans-serif"),
        this.S = q(this, "Georgia,'Century Schoolbook L',serif")
    }
    function j(e) {
        e.u(function(e, t) {
            return function() {
                t.call(e)
            }
        } (e, e.K), 25)
    }
    function F(e, t) {
        p(e.R),
        p(e.S),
        t(e.M, e.B)
    }
    function I(e, t) {
        var n = q(e, t, i),
        r = e.n.p(n);
        return p(n),
        r
    }
    function q(e, t, n) {
        return t = e.c.createElement("span", {
            style: R(e, t, e.B, n)
        },
        e.qa),
        c(e.c, "body", t),
        t
    }
    function R(e, t, n, r) {
        return n = e.v.expand(n),
        "position:absolute;top:-999px;left:-999px;font-size:300px;width:auto;height:auto;line-height:normal;margin:0;padding:0;font-variant:normal;font-family:" + (r ? "": e.ya.quote(e.M) + ",") + t + ";" + n
    }
    function U(e, t, n, r, i) {
        this.c = e,
        this.W = t,
        this.g = n,
        this.u = r,
        this.a = i,
        this.N = this.O = 0
    }
    function z(e, t, n) {
        n = D(e.W, n),
        e.N = e.O = n.length;
        for (var r = new P(e.c, t, {
            p: function(e) {
                return e.offsetWidth
            }
        },
        e.u,
        function() {
            return (new Date).getTime()
        }), i = 0, s = n.length; i < s; i++) {
            var o = n[i];
            o.z(e.a, f(e, e.wa, o, t, r))
        }
    }
    function W(e) {
        this.xa = e || "-"
    }
    function X() {
        this.ga = "'"
    }
    function V() {
        this.H = $,
        this.o = J
    }
    function K(e, t, n) {
        this.$ = e,
        this.Da = t,
        this.o = n
    }
    function Q(e, t, n, r, s, u, a, f, l) {
        Q.Ea.call(this, e, t, n, r, s, u, a, f, l),
        e = "Times New Roman,Lucida Sans Unicode,Courier New,Tahoma,Arial,Microsoft Sans Serif,Times,Lucida Console,Sans,Serif,Monospace".split(","),
        t = e.length,
        n = {},
        r = q(this, e[0], i),
        n[this.n.p(r)] = i;
        for (s = 1; s < t; s++) u = e[s],
        b(this.c, r, R(this, u, this.B, i)),
        n[this.n.p(r)] = i,
        "4" != this.B[1] && (b(this.c, r, R(this, u, this.B[0] + "4", i)), n[this.n.p(r)] = i);
        p(r),
        this.t = n,
        this.ka = o
    }
    function Y(t) {
        this.J = t ? t: ("https:" == e.location.protocol ? "https:": "http:") + Z,
        this.f = [],
        this.T = []
    }
    function et(e) {
        this.f = e,
        this.fa = [],
        this.ja = {},
        this.G = {},
        this.v = new V
    }
    function rt(e, t, n) {
        this.a = e,
        this.c = t,
        this.d = n
    }
    function it(e, t, n) {
        this.m = e,
        this.c = t,
        this.d = n,
        this.f = [],
        this.s = {}
    }
    function st(e, t, n) {
        this.m = e,
        this.c = t,
        this.d = n,
        this.f = [],
        this.s = {},
        this.v = new V
    }
    function ot(e, t) {
        this.c = e,
        this.d = t
    }
    function at(e, t) {
        this.c = e,
        this.d = t
    }
    function ft(e, t, n, r, i) {
        this.m = e,
        this.a = t,
        this.c = n,
        this.k = r,
        this.d = i,
        this.f = [],
        this.s = {}
    }
    var r = void 0,
    i = !0,
    s = null,
    o = !1,
    a;
    l.prototype.createElement = function(e, t, n) {
        e = this.F.createElement(e);
        if (t) for (var r in t) t.hasOwnProperty(r) && ("style" == r ? b(this, e, t[r]) : e.setAttribute(r, t[r]));
        return n && e.appendChild(this.F.createTextNode(n)),
        e
    },
    a = w.prototype,
    a.getName = u("za"),
    a.va = u("Fa"),
    a.X = u("na"),
    a.sa = u("ma"),
    a.ta = u("Ca"),
    a.ua = u("Ba"),
    a.ra = u("la"),
    a.w = u("Ga");
    var S = new w("Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", r, o);
    E.prototype.parse = function() {
        var e;
        if ( - 1 != this.a.indexOf("MSIE")) if (e = C(this.a, /(MSIE [\d\w\.]+)/, 1), "" != e) {
            var t = e.split(" ");
            e = t[0],
            t = t[1],
            e = new w(e, t, e, t, x(this), T(this), k(this.k), 6 <= N(t))
        } else e = new w("MSIE", "Unknown", "MSIE", "Unknown", x(this), T(this), k(this.k), o);
        else if ( - 1 != this.a.indexOf("Opera")) e: {
            var t = e = "Unknown",
            n = C(this.a, /(Presto\/[\d\w\.]+)/, 1);
            "" != n ? (t = n.split("/"), e = t[0], t = t[1]) : ( - 1 != this.a.indexOf("Gecko") && (e = "Gecko"), n = C(this.a, /rv:([^\)]+)/, 1), "" != n && (t = n));
            if ( - 1 != this.a.indexOf("Version/") && (n = C(this.a, /Version\/([\d\.]+)/, 1), "" != n)) {
                e = new w("Opera", n, e, t, x(this), T(this), k(this.k), 10 <= N(n));
                break e
            }
            n = C(this.a, /Opera[\/ ]([\d\.]+)/, 1),
            e = "" != n ? new w("Opera", n, e, t, x(this), T(this), k(this.k), 10 <= N(n)) : new w("Opera", "Unknown", e, t, x(this), T(this), k(this.k), o)
        } else if ( - 1 != this.a.indexOf("AppleWebKit")) {
            e = x(this),
            t = T(this),
            n = C(this.a, /AppleWebKit\/([\d\.\+]+)/, 1),
            "" == n && (n = "Unknown");
            var r = "Unknown"; - 1 != this.a.indexOf("Chrome") || -1 != this.a.indexOf("CrMo") ? r = "Chrome": -1 != this.a.indexOf("Safari") ? r = "Safari": -1 != this.a.indexOf("AdobeAIR") && (r = "AdobeAIR");
            var i = "Unknown"; - 1 != this.a.indexOf("Version/") ? i = C(this.a, /Version\/([\d\.\w]+)/, 1) : "Chrome" == r ? i = C(this.a, /(Chrome|CrMo)\/([\d\.]+)/, 2) : "AdobeAIR" == r && (i = C(this.a, /AdobeAIR\/([\d\.]+)/, 1));
            var u = o;
            "AdobeAIR" == r ? (u = C(i, /\d+\.(\d+)/, 1), u = 2 < N(i) || 2 == N(i) && 5 <= parseInt(u, 10)) : (u = C(n, /\d+\.(\d+)/, 1), u = 526 <= N(n) || 525 <= N(n) && 13 <= parseInt(u, 10)),
            e = new w(r, i, "AppleWebKit", n, e, t, k(this.k), u)
        } else - 1 != this.a.indexOf("Gecko") ? (t = e = "Unknown", r = o, -1 != this.a.indexOf("Firefox") ? (e = "Firefox", n = C(this.a, /Firefox\/([\d\w\.]+)/, 1), "" != n && (r = C(n, /\d+\.(\d+)/, 1), t = n, r = "" != n && 3 <= N(n) && 5 <= parseInt(r, 10))) : -1 != this.a.indexOf("Mozilla") && (e = "Mozilla"), n = C(this.a, /rv:([^\)]+)/, 1), "" == n ? n = "Unknown": r || (r = N(n), i = parseInt(C(n, /\d+\.(\d+)/, 1), 10), u = parseInt(C(n, /\d+\.\d+\.(\d+)/, 1), 10), r = 1 < r || 1 == r && 9 < i || 1 == r && 9 == i && 2 <= u || n.match(/1\.9\.1b[123]/) != s || n.match(/1\.9\.1\.[\d\.]+/) != s), e = new w(e, t, "Gecko", n, x(this), T(this), k(this.k), r)) : e = S;
        return e
    },
    P.prototype.watch = function(e, t, n, r, i) {
        for (var s = e.length,
        o = 0; o < s; o++) {
            var u = e[o];
            t[u] || (t[u] = ["n4"]),
            this.L += t[u].length
        }
        i && (this.da = i);
        for (o = 0; o < s; o++) for (var u = e[o], i = t[u], a = n[u], l = 0, c = i.length; l < c; l++) {
            var h = i[l],
            p = this.A,
            d = u,
            v = h;
            m(p.g, p.h.e(p.j, d, v, "loading")),
            M(p, "fontloading", d, v),
            p = f(this, this.oa),
            d = f(this, this.pa),
            (new r(p, d, this.c, this.n, this.u, this.D, u, h, a)).start()
        }
    },
    P.prototype.oa = function(e, t) {
        var n = this.A;
        g(n.g, n.h.e(n.j, e, t, "loading")),
        g(n.g, n.h.e(n.j, e, t, "inactive")),
        m(n.g, n.h.e(n.j, e, t, "active")),
        M(n, "fontactive", e, t),
        this.ia = i,
        H(this)
    },
    P.prototype.pa = function(e, t) {
        var n = this.A;
        g(n.g, n.h.e(n.j, e, t, "loading")),
        y(n.g, n.h.e(n.j, e, t, "active")) || m(n.g, n.h.e(n.j, e, t, "inactive")),
        M(n, "fontinactive", e, t),
        H(this)
    },
    B.prototype.start = function() {
        this.ha = this.D(),
        this.K()
    },
    B.prototype.K = function() {
        var e = this.n.p(this.R),
        t = this.n.p(this.S);
        this.P == e && this.Q == t || this.ba != e || this.ca != t ? 5e3 <= this.D() - this.ha ? F(this, this.Z) : (this.ba = e, this.ca = t, j(this)) : F(this, this.I)
    },
    U.prototype.q = function(e, t) {
        this.W.ea[e] = t
    },
    U.prototype.load = function(e) {
        var t = new L(this.c, this.g, e);
        this.a.w() ? z(this, t, e) : O(t)
    },
    U.prototype.wa = function(e, t, n, r) {
        var i = e.Y ? e.Y() : B;
        r ? e.load(f(this, this.Aa, t, n, i)) : (e = 0 == --this.O, this.N--, e && (0 == this.N ? O(t) : A(t)), n.watch([], {},
        {},
        i, e))
    },
    U.prototype.Aa = function(e, t, n, r, i, s) {
        var o = 0 == --this.O;
        o && A(e),
        this.u(f(this,
        function(e, t, n, r, i, s) {
            e.watch(t, n || {},
            r || {},
            i, s)
        },
        t, r, i, s, n, o))
    },
    W.prototype.e = function(e) {
        for (var t = [], n = 0; n < arguments.length; n++) t.push(arguments[n].replace(/[\W_]+/g, "").toLowerCase());
        return t.join(this.xa)
    },
    X.prototype.quote = function(e) {
        for (var t = [], e = e.split(/,\s*/), n = 0; n < e.length; n++) {
            var r = e[n].replace(/['"]/g, ""); - 1 == r.indexOf(" ") ? t.push(r) : t.push(this.ga + r + this.ga)
        }
        return t.join(",")
    };
    var $ = ["font-style", "font-weight"],
    J = {
        "font-style": [["n", "normal"], ["i", "italic"], ["o", "oblique"]],
        "font-weight": [["1", "100"], ["2", "200"], ["3", "300"], ["4", "400"], ["5", "500"], ["6", "600"], ["7", "700"], ["8", "800"], ["9", "900"], ["4", "normal"], ["7", "bold"]]
    };
    K.prototype.compact = function(e, t) {
        for (var n = 0; n < this.o.length; n++) if (t == this.o[n][1]) {
            e[this.$] = this.o[n][0];
            break
        }
    },
    K.prototype.expand = function(e, t) {
        for (var n = 0; n < this.o.length; n++) if (t == this.o[n][0]) {
            e[this.$] = this.Da + ":" + this.o[n][1];
            break
        }
    },
    V.prototype.compact = function(e) {
        for (var t = ["n", "4"], e = e.split(";"), n = 0, r = e.length; n < r; n++) {
            var i = e[n].replace(/\s+/g, "").split(":");
            if (2 == i.length) {
                var o = i[1];
                e: {
                    for (var i = i[0], u = 0; u < this.H.length; u++) if (i == this.H[u]) {
                        i = new K(u, i, this.o[i]);
                        break e
                    }
                    i = s
                }
                i && i.compact(t, o)
            }
        }
        return t.join("")
    },
    V.prototype.expand = function(e) {
        if (2 != e.length) return s;
        for (var t = [s, s], n = 0, r = this.H.length; n < r; n++) {
            var i = this.H[n]; (new K(n, i, this.o[i])).expand(t, e.substr(n, 1))
        }
        return t[0] && t[1] ? t.join(";") + ";": s
    },
    e.WebFont = function() {
        var e = (new E(navigator.userAgent, t)).parse();
        return new U(new l(t), new _, t.documentElement,
        function(e, t) {
            setTimeout(e, t)
        },
        e)
    } (),
    e.WebFont.load = e.WebFont.load,
    e.WebFont.addModule = e.WebFont.q,
    w.prototype.getName = w.prototype.getName,
    w.prototype.getVersion = w.prototype.va,
    w.prototype.getEngine = w.prototype.X,
    w.prototype.getEngineVersion = w.prototype.sa,
    w.prototype.getPlatform = w.prototype.ta,
    w.prototype.getPlatformVersion = w.prototype.ua,
    w.prototype.getDocumentMode = w.prototype.ra,
    w.prototype.isSupportingWebFont = w.prototype.w,
    function(e, t) {
        function n() {}
        n.prototype = e.prototype,
        t.prototype = new n,
        t.Ea = e,
        t.Ha = e.prototype
    } (B, Q);
    var G = {
        Arimo: i,
        Cousine: i,
        Tinos: i
    };
    Q.prototype.K = function() {
        var e = this.n.p(this.R),
        t = this.n.p(this.S); ! this.ka && e == t && this.t[e] && (this.t = {},
        this.ka = this.t[e] = i),
        (this.P != e || this.Q != t) && !this.t[e] && !this.t[t] ? F(this, this.I) : 5e3 <= this.D() - this.ha ? this.t[e] && this.t[t] && G[this.M] ? F(this, this.I) : F(this, this.Z) : j(this)
    };
    var Z = "//fonts.googleapis.com/css";
    Y.prototype.e = function() {
        if (0 == this.f.length) throw Error("No fonts to load !");
        if ( - 1 != this.J.indexOf("kit=")) return this.J;
        for (var e = this.f.length,
        t = [], n = 0; n < e; n++) t.push(this.f[n].replace(/ /g, "+"));
        return e = this.J + "?family=" + t.join("%7C"),
        0 < this.T.length && (e += "&subset=" + this.T.join(",")),
        e
    };
    var tt = {
        ultralight: "n2",
        light: "n3",
        regular: "n4",
        bold: "n7",
        italic: "i4",
        bolditalic: "i7",
        ul: "n2",
        l: "n3",
        r: "n4",
        b: "n7",
        i: "i4",
        bi: "i7"
    },
    nt = {
        latin: "BESbswy",
        cyrillic: "&#1081;&#1103;&#1046;",
        greek: "&#945;&#946;&#931;",
        khmer: "&#x1780;&#x1781;&#x1782;",
        Hanuman: "&#x1780;&#x1781;&#x1782;"
    };
    et.prototype.parse = function() {
        for (var e = this.f.length,
        t = 0; t < e; t++) {
            var n = this.f[t].split(":"),
            r = n[0].replace(/\+/g, " "),
            i = ["n4"];
            if (2 <= n.length) {
                var o, u = n[1];
                o = [];
                if (u) for (var u = u.split(","), a = u.length, f = 0; f < a; f++) {
                    var l;
                    l = u[f];
                    if (l.match(/^[\w ]+$/)) {
                        var c = tt[l];
                        c ? l = c: (c = l.match(/^(\d*)(\w*)$/), l = c[1], c = c[2], l = (l = this.v.expand([c ? c: "n", l ? l.substr(0, 1) : "4"].join(""))) ? this.v.compact(l) : s)
                    } else l = "";
                    l && o.push(l)
                }
                0 < o.length && (i = o),
                3 == n.length && (n = n[2], o = [], n = n ? n.split(",") : o, 0 < n.length && (n = nt[n[0]]) && (this.G[r] = n))
            }
            this.G[r] || (n = nt[r]) && (this.G[r] = n),
            this.fa.push(r),
            this.ja[r] = i
        }
    },
    rt.prototype.z = function(e, t) {
        t(e.w())
    },
    rt.prototype.Y = function() {
        return "AppleWebKit" == this.a.X() ? Q: B
    },
    rt.prototype.load = function(e) {
        "MSIE" == this.a.getName() && this.d.blocking != i ? h(f(this, this.aa, e)) : this.aa(e)
    },
    rt.prototype.aa = function(e) {
        for (var t = this.c,
        n = new Y(this.d.api), r = this.d.families, i = r.length, s = 0; s < i; s++) {
            var o = r[s].split(":");
            3 == o.length && n.T.push(o.pop()),
            n.f.push(o.join(":"))
        }
        r = new et(r),
        r.parse(),
        c(t, "head", d(t, n.e())),
        e(r.fa, r.ja, r.G)
    },
    e.WebFont.q("google",
    function(e) {
        var n = (new E(navigator.userAgent, t)).parse();
        return new rt(n, new l(t), e)
    }),
    it.prototype.C = function(t) {
        var n = "https:" == e.location.protocol ? "https:": "http:";
        return (this.d.api || n + "//use.typekit.com") + "/" + t + ".js"
    },
    it.prototype.z = function(e, t) {
        var n = this.d.id,
        r = this.d,
        s = this;
        n ? (this.m.__webfonttypekitmodule__ || (this.m.__webfonttypekitmodule__ = {}), this.m.__webfonttypekitmodule__[n] = function(n) {
            n(e, r,
            function(e, n, r) {
                s.f = n,
                s.s = r,
                t(e)
            })
        },
        c(this.c, "head", v(this.c, this.C(n)))) : t(i)
    },
    it.prototype.load = function(e) {
        e(this.f, this.s)
    },
    e.WebFont.q("typekit",
    function(n) {
        return new it(e, new l(t), n)
    }),
    st.prototype.C = function(e) {
        return ("https:" == this.m.location.protocol ? "https:": "http:") + (this.d.api || "//f.fontdeck.com/s/css/js/") + this.m.document.location.hostname + "/" + e + ".js"
    },
    st.prototype.z = function(e, t) {
        var n = this.d.id,
        r = this;
        n ? (this.m.__webfontfontdeckmodule__ || (this.m.__webfontfontdeckmodule__ = {}), this.m.__webfontfontdeckmodule__[n] = function(e, n) {
            for (var i = 0,
            s = n.fonts.length; i < s; ++i) {
                var o = n.fonts[i];
                r.f.push(o.name),
                r.s[o.name] = [r.v.compact("font-weight:" + o.weight + ";font-style:" + o.style)]
            }
            t(e)
        },
        c(this.c, "head", v(this.c, this.C(n)))) : t(i)
    },
    st.prototype.load = function(e) {
        e(this.f, this.s)
    },
    e.WebFont.q("fontdeck",
    function(n) {
        return new st(e, new l(t), n)
    });
    var ut = {
        regular: "n4",
        bold: "n7",
        italic: "i4",
        bolditalic: "i7",
        r: "n4",
        b: "n7",
        i: "i4",
        bi: "i7"
    };
    ot.prototype.z = function(e, t) {
        return t(e.w())
    },
    ot.prototype.load = function(e) {
        var n, i;
        c(this.c, "head", d(this.c, ("https:" == t.location.protocol ? "https:": "http:") + "//webfonts.fontslive.com/css/" + this.d.key + ".css"));
        var s = this.d.families,
        o, u;
        o = [],
        u = {};
        for (var a = 0,
        f = s.length; a < f; a++) {
            i = i = n = r,
            i = s[a].split(":"),
            n = i[0];
            if (i[1]) {
                i = i[1].split(",");
                for (var l = [], h = 0, p = i.length; h < p; h++) {
                    var v = i[h];
                    if (v) {
                        var m = ut[v];
                        l.push(m ? m: v)
                    }
                }
                i = l
            } else i = ["n4"];
            o.push(n),
            u[n] = i
        }
        e(o, u)
    },
    e.WebFont.q("ascender",
    function(e) {
        return new ot(new l(t), e)
    }),
    at.prototype.load = function(e) {
        for (var t = this.d.urls || [], n = this.d.families || [], r = 0, i = t.length; r < i; r++) c(this.c, "head", d(this.c, t[r]));
        e(n)
    },
    at.prototype.z = function(e, t) {
        return t(e.w())
    },
    e.WebFont.q("custom",
    function(e) {
        return new at(new l(t), e)
    }),
    ft.prototype.z = function(e, t) {
        var n = this,
        r = n.d.projectId;
        if (r) {
            var o = v(n.c, n.C(r));
            o.id = "__MonotypeAPIScript__" + r,
            o.onreadystatechange = function(e) {
                if ("loaded" === o.readyState || "complete" === o.readyState) o.onreadystatechange = s,
                o.onload(e)
            },
            o.onload = function() {
                if (n.m["__mti_fntLst" + r]) {
                    var i = n.m["__mti_fntLst" + r]();
                    if (i && i.length) {
                        var s;
                        for (s = 0; s < i.length; s++) n.f.push(i[s].fontfamily)
                    }
                }
                t(e.w())
            },
            c(this.c, "head", o)
        } else t(i)
    },
    ft.prototype.C = function(e) {
        var t = this.protocol(),
        n = (this.d.api || "fast.fonts.com/jsapi").replace(/^.*http(s?):(\/\/)?/, "");
        return t + "//" + n + "/" + e + ".js"
    },
    ft.prototype.load = function(e) {
        e(this.f, this.s)
    },
    ft.prototype.protocol = function() {
        var e = ["http:", "https:"],
        t = e[0];
        if (this.k && this.k.location && this.k.location.protocol) for (var n = 0,
        n = 0; n < e.length; n++) if (this.k.location.protocol === e[n]) return this.k.location.protocol;
        return t
    },
    e.WebFont.q("monotype",
    function(n) {
        var r = (new E(navigator.userAgent, t)).parse();
        return new ft(e, r, new l(t), t, n)
    }),
    e.WebFontConfig && e.WebFont.load(e.WebFontConfig)
} (this, document),
function(e, t) {
    function n() {
        var e = v.elements;
        return "string" == typeof e ? e.split(" ") : e
    }
    function r(e) {
        var t = p[e[c]];
        return t || (t = {},
        h++, e[c] = h, p[h] = t),
        t
    }
    function i(e, n, i) {
        return n || (n = t),
        d ? n.createElement(e) : (i || (i = r(n)), n = i.cache[e] ? i.cache[e].cloneNode() : f.test(e) ? (i.cache[e] = i.createElem(e)).cloneNode() : i.createElem(e), n.canHaveChildren && !a.test(e) ? i.frag.appendChild(n) : n)
    }
    function s(e, t) {
        t.cache || (t.cache = {},
        t.createElem = e.createElement, t.createFrag = e.createDocumentFragment, t.frag = t.createFrag()),
        e.createElement = function(n) {
            return v.shivMethods ? i(n, e, t) : t.createElem(n)
        },
        e.createDocumentFragment = Function("h,f", "return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&(" + n().join().replace(/\w+/g,
        function(e) {
            return t.createElem(e),
            t.frag.createElement(e),
            'c("' + e + '")'
        }) + ");return n}")(v, t.frag)
    }
    function o(e) {
        e || (e = t);
        var n = r(e);
        if (v.shivCSS && !l && !n.hasCSS) {
            var i, o = e;
            i = o.createElement("p"),
            o = o.getElementsByTagName("head")[0] || o.documentElement,
            i.innerHTML = "x<style>article,aside,figcaption,figure,footer,header,hgroup,nav,section{display:block}mark{background:#FF0;color:#000}</style>",
            i = o.insertBefore(i.lastChild, o.firstChild),
            n.hasCSS = !!i
        }
        return d || s(e, n),
        e
    }
    var u = e.html5 || {},
    a = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,
    f = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,
    l, c = "_html5shiv",
    h = 0,
    p = {},
    d; (function() {
        try {
            var e = t.createElement("a");
            e.innerHTML = "<xyz></xyz>",
            l = "hidden" in e;
            var n;
            if (! (n = 1 == e.childNodes.length)) {
                t.createElement("a");
                var r = t.createDocumentFragment();
                n = "undefined" == typeof r.cloneNode || "undefined" == typeof r.createDocumentFragment || "undefined" == typeof r.createElement
            }
            d = n
        } catch(i) {
            d = l = !0
        }
    })();
    var v = {
        elements: u.elements || "abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",
        version: "3.6.2pre",
        shivCSS: !1 !== u.shivCSS,
        supportsUnknownElements: d,
        shivMethods: !1 !== u.shivMethods,
        type: "default",
        shivDocument: o,
        createElement: i,
        createDocumentFragment: function(e, i) {
            e || (e = t);
            if (d) return e.createDocumentFragment();
            for (var i = i || r(e), s = i.frag.cloneNode(), o = 0, u = n(), a = u.length; o < a; o++) s.createElement(u[o]);
            return s
        }
    };
    e.html5 = v,
    o(t)
} (this, document);
var swfobject = function() {
    function C() {
        if (b) return;
        try {
            var e = a.getElementsByTagName("body")[0].appendChild(U("span"));
            e.parentNode.removeChild(e)
        } catch(t) {
            return
        }
        b = !0;
        var n = c.length;
        for (var r = 0; r < n; r++) c[r]()
    }
    function k(e) {
        b ? e() : c[c.length] = e
    }
    function L(t) {
        if (typeof u.addEventListener != e) u.addEventListener("load", t, !1);
        else if (typeof a.addEventListener != e) a.addEventListener("load", t, !1);
        else if (typeof u.attachEvent != e) z(u, "onload", t);
        else if (typeof u.onload == "function") {
            var n = u.onload;
            u.onload = function() {
                n(),
                t()
            }
        } else u.onload = t
    }
    function A() {
        l ? O() : M()
    }
    function O() {
        var n = a.getElementsByTagName("body")[0],
        r = U(t);
        r.setAttribute("type", i);
        var s = n.appendChild(r);
        if (s) {
            var o = 0; (function() {
                if (typeof s.GetVariable != e) {
                    var t = s.GetVariable("$version");
                    t && (t = t.split(" ")[1].split(","), T.pv = [parseInt(t[0], 10), parseInt(t[1], 10), parseInt(t[2], 10)])
                } else if (o < 10) {
                    o++,
                    setTimeout(arguments.callee, 10);
                    return
                }
                n.removeChild(r),
                s = null,
                M()
            })()
        } else M()
    }
    function M() {
        var t = h.length;
        if (t > 0) for (var n = 0; n < t; n++) {
            var r = h[n].id,
            i = h[n].callbackFn,
            s = {
                success: !1,
                id: r
            };
            if (T.pv[0] > 0) {
                var o = R(r);
                if (o) if (W(h[n].swfVersion) && !(T.wk && T.wk < 312)) V(r, !0),
                i && (s.success = !0, s.ref = _(r), i(s));
                else if (h[n].expressInstall && D()) {
                    var u = {};
                    u.data = h[n].expressInstall,
                    u.width = o.getAttribute("width") || "0",
                    u.height = o.getAttribute("height") || "0",
                    o.getAttribute("class") && (u.styleclass = o.getAttribute("class")),
                    o.getAttribute("align") && (u.align = o.getAttribute("align"));
                    var a = {},
                    f = o.getElementsByTagName("param"),
                    l = f.length;
                    for (var c = 0; c < l; c++) f[c].getAttribute("name").toLowerCase() != "movie" && (a[f[c].getAttribute("name")] = f[c].getAttribute("value"));
                    P(u, a, r, i)
                } else H(o),
                i && i(s)
            } else {
                V(r, !0);
                if (i) {
                    var p = _(r);
                    p && typeof p.SetVariable != e && (s.success = !0, s.ref = p),
                    i(s)
                }
            }
        }
    }
    function _(n) {
        var r = null,
        i = R(n);
        if (i && i.nodeName == "OBJECT") if (typeof i.SetVariable != e) r = i;
        else {
            var s = i.getElementsByTagName(t)[0];
            s && (r = s)
        }
        return r
    }
    function D() {
        return ! w && W("6.0.65") && (T.win || T.mac) && !(T.wk && T.wk < 312)
    }
    function P(t, n, r, i) {
        w = !0,
        g = i || null,
        y = {
            success: !1,
            id: r
        };
        var o = R(r);
        if (o) {
            o.nodeName == "OBJECT" ? (v = B(o), m = null) : (v = o, m = r),
            t.id = s;
            if (typeof t.width == e || !/%$/.test(t.width) && parseInt(t.width, 10) < 310) t.width = "310";
            if (typeof t.height == e || !/%$/.test(t.height) && parseInt(t.height, 10) < 137) t.height = "137";
            a.title = a.title.slice(0, 47) + " - Flash Player Installation";
            var f = T.ie && T.win ? "ActiveX": "PlugIn",
            l = "MMredirectURL=" + u.location.toString().replace(/&/g, "%26") + "&MMplayerType=" + f + "&MMdoctitle=" + a.title;
            typeof n.flashvars != e ? n.flashvars += "&" + l: n.flashvars = l;
            if (T.ie && T.win && o.readyState != 4) {
                var c = U("div");
                r += "SWFObjectNew",
                c.setAttribute("id", r),
                o.parentNode.insertBefore(c, o),
                o.style.display = "none",
                function() {
                    o.readyState == 4 ? o.parentNode.removeChild(o) : setTimeout(arguments.callee, 10)
                } ()
            }
            j(t, n, r)
        }
    }
    function H(e) {
        if (T.ie && T.win && e.readyState != 4) {
            var t = U("div");
            e.parentNode.insertBefore(t, e),
            t.parentNode.replaceChild(B(e), t),
            e.style.display = "none",
            function() {
                e.readyState == 4 ? e.parentNode.removeChild(e) : setTimeout(arguments.callee, 10)
            } ()
        } else e.parentNode.replaceChild(B(e), e)
    }
    function B(e) {
        var n = U("div");
        if (T.win && T.ie) n.innerHTML = e.innerHTML;
        else {
            var r = e.getElementsByTagName(t)[0];
            if (r) {
                var i = r.childNodes;
                if (i) {
                    var s = i.length;
                    for (var o = 0; o < s; o++)(i[o].nodeType != 1 || i[o].nodeName != "PARAM") && i[o].nodeType != 8 && n.appendChild(i[o].cloneNode(!0))
                }
            }
        }
        return n
    }
    function j(n, r, s) {
        var o, u = R(s);
        if (T.wk && T.wk < 312) return o;
        if (u) {
            typeof n.id == e && (n.id = s);
            if (T.ie && T.win) {
                var a = "";
                for (var f in n) n[f] != Object.prototype[f] && (f.toLowerCase() == "data" ? r.movie = n[f] : f.toLowerCase() == "styleclass" ? a += ' class="' + n[f] + '"': f.toLowerCase() != "classid" && (a += " " + f + '="' + n[f] + '"'));
                var l = "";
                for (var c in r) r[c] != Object.prototype[c] && (l += '<param name="' + c + '" value="' + r[c] + '" />');
                u.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + a + ">" + l + "</object>",
                p[p.length] = n.id,
                o = R(n.id)
            } else {
                var h = U(t);
                h.setAttribute("type", i);
                for (var d in n) n[d] != Object.prototype[d] && (d.toLowerCase() == "styleclass" ? h.setAttribute("class", n[d]) : d.toLowerCase() != "classid" && h.setAttribute(d, n[d]));
                for (var v in r) r[v] != Object.prototype[v] && v.toLowerCase() != "movie" && F(h, v, r[v]);
                u.parentNode.replaceChild(h, u),
                o = h
            }
        }
        return o
    }
    function F(e, t, n) {
        var r = U("param");
        r.setAttribute("name", t),
        r.setAttribute("value", n),
        e.appendChild(r)
    }
    function I(e) {
        var t = R(e);
        t && t.nodeName == "OBJECT" && (T.ie && T.win ? (t.style.display = "none",
        function() {
            t.readyState == 4 ? q(e) : setTimeout(arguments.callee, 10)
        } ()) : t.parentNode.removeChild(t))
    }
    function q(e) {
        var t = R(e);
        if (t) {
            for (var n in t) typeof t[n] == "function" && (t[n] = null);
            t.parentNode.removeChild(t)
        }
    }
    function R(e) {
        var t = null;
        try {
            t = a.getElementById(e)
        } catch(n) {}
        return t
    }
    function U(e) {
        return a.createElement(e)
    }
    function z(e, t, n) {
        e.attachEvent(t, n),
        d[d.length] = [e, t, n]
    }
    function W(e) {
        var t = T.pv,
        n = e.split(".");
        return n[0] = parseInt(n[0], 10),
        n[1] = parseInt(n[1], 10) || 0,
        n[2] = parseInt(n[2], 10) || 0,
        t[0] > n[0] || t[0] == n[0] && t[1] > n[1] || t[0] == n[0] && t[1] == n[1] && t[2] >= n[2] ? !0 : !1
    }
    function X(n, r, i, s) {
        if (T.ie && T.mac) return;
        var o = a.getElementsByTagName("head")[0];
        if (!o) return;
        var u = i && typeof i == "string" ? i: "screen";
        s && (E = null, S = null);
        if (!E || S != u) {
            var f = U("style");
            f.setAttribute("type", "text/css"),
            f.setAttribute("media", u),
            E = o.appendChild(f),
            T.ie && T.win && typeof a.styleSheets != e && a.styleSheets.length > 0 && (E = a.styleSheets[a.styleSheets.length - 1]),
            S = u
        }
        T.ie && T.win ? E && typeof E.addRule == t && E.addRule(n, r) : E && typeof a.createTextNode != e && E.appendChild(a.createTextNode(n + " {" + r + "}"))
    }
    function V(e, t) {
        if (!x) return;
        var n = t ? "visible": "hidden";
        b && R(e) ? R(e).style.visibility = n: X("#" + e, "visibility:" + n)
    }
    function $(t) {
        var n = /[\\\"<>\.;]/,
        r = n.exec(t) != null;
        return r && typeof encodeURIComponent != e ? encodeURIComponent(t) : t
    }
    var e = "undefined",
    t = "object",
    n = "Shockwave Flash",
    r = "ShockwaveFlash.ShockwaveFlash",
    i = "application/x-shockwave-flash",
    s = "SWFObjectExprInst",
    o = "onreadystatechange",
    u = window,
    a = document,
    f = navigator,
    l = !1,
    c = [A],
    h = [],
    p = [],
    d = [],
    v,
    m,
    g,
    y,
    b = !1,
    w = !1,
    E,
    S,
    x = !0,
    T = function() {
        var s = typeof a.getElementById != e && typeof a.getElementsByTagName != e && typeof a.createElement != e,
        o = f.userAgent.toLowerCase(),
        c = f.platform.toLowerCase(),
        h = c ? /win/.test(c) : /win/.test(o),
        p = c ? /mac/.test(c) : /mac/.test(o),
        d = /webkit/.test(o) ? parseFloat(o.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : !1,
        v = !1,
        m = [0, 0, 0],
        g = null;
        if (typeof f.plugins != e && typeof f.plugins[n] == t) g = f.plugins[n].description,
        g && (typeof f.mimeTypes == e || !f.mimeTypes[i] || !!f.mimeTypes[i].enabledPlugin) && (l = !0, v = !1, g = g.replace(/^.*\s+(\S+\s+\S+$)/, "$1"), m[0] = parseInt(g.replace(/^(.*)\..*$/, "$1"), 10), m[1] = parseInt(g.replace(/^.*\.(.*)\s.*$/, "$1"), 10), m[2] = /[a-zA-Z]/.test(g) ? parseInt(g.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0);
        else if (typeof u.ActiveXObject != e) try {
            var y = new ActiveXObject(r);
            y && (g = y.GetVariable("$version"), g && (v = !0, g = g.split(" ")[1].split(","), m = [parseInt(g[0], 10), parseInt(g[1], 10), parseInt(g[2], 10)]))
        } catch(b) {}
        return {
            w3: s,
            pv: m,
            wk: d,
            ie: v,
            win: h,
            mac: p
        }
    } (),
    N = function() {
        if (!T.w3) return; (typeof a.readyState != e && a.readyState == "complete" || typeof a.readyState == e && (a.getElementsByTagName("body")[0] || a.body)) && C(),
        b || (typeof a.addEventListener != e && a.addEventListener("DOMContentLoaded", C, !1), T.ie && T.win && (a.attachEvent(o,
        function() {
            a.readyState == "complete" && (a.detachEvent(o, arguments.callee), C())
        }), u == top &&
        function() {
            if (b) return;
            try {
                a.documentElement.doScroll("left")
            } catch(e) {
                setTimeout(arguments.callee, 0);
                return
            }
            C()
        } ()), T.wk &&
        function() {
            if (b) return;
            if (!/loaded|complete/.test(a.readyState)) {
                setTimeout(arguments.callee, 0);
                return
            }
            C()
        } (), L(C))
    } (),
    J = function() {
        T.ie && T.win && window.attachEvent("onunload",
        function() {
            var e = d.length;
            for (var t = 0; t < e; t++) d[t][0].detachEvent(d[t][1], d[t][2]);
            var n = p.length;
            for (var r = 0; r < n; r++) I(p[r]);
            for (var i in T) T[i] = null;
            T = null;
            for (var s in swfobject) swfobject[s] = null;
            swfobject = null
        })
    } ();
    return {
        registerObject: function(e, t, n, r) {
            if (T.w3 && e && t) {
                var i = {};
                i.id = e,
                i.swfVersion = t,
                i.expressInstall = n,
                i.callbackFn = r,
                h[h.length] = i,
                V(e, !1)
            } else r && r({
                success: !1,
                id: e
            })
        },
        getObjectById: function(e) {
            if (T.w3) return _(e)
        },
        embedSWF: function(n, r, i, s, o, u, a, f, l, c) {
            var h = {
                success: !1,
                id: r
            };
            T.w3 && !(T.wk && T.wk < 312) && n && r && i && s && o ? (V(r, !1), k(function() {
                i += "",
                s += "";
                var p = {};
                if (l && typeof l === t) for (var d in l) p[d] = l[d];
                p.data = n,
                p.width = i,
                p.height = s;
                var v = {};
                if (f && typeof f === t) for (var m in f) v[m] = f[m];
                if (a && typeof a === t) for (var g in a) typeof v.flashvars != e ? v.flashvars += "&" + g + "=" + a[g] : v.flashvars = g + "=" + a[g];
                if (W(o)) {
                    var y = j(p, v, r);
                    p.id == r && V(r, !0),
                    h.success = !0,
                    h.ref = y
                } else {
                    if (u && D()) {
                        p.data = u,
                        P(p, v, r, c);
                        return
                    }
                    V(r, !0)
                }
                c && c(h)
            })) : c && c(h)
        },
        switchOffAutoHideShow: function() {
            x = !1
        },
        ua: T,
        getFlashPlayerVersion: function() {
            return {
                major: T.pv[0],
                minor: T.pv[1],
                release: T.pv[2]
            }
        },
        hasFlashPlayerVersion: W,
        createSWF: function(e, t, n) {
            return T.w3 ? j(e, t, n) : undefined
        },
        showExpressInstall: function(e, t, n, r) {
            T.w3 && D() && P(e, t, n, r)
        },
        removeSWF: function(e) {
            T.w3 && I(e)
        },
        createCSS: function(e, t, n, r) {
            T.w3 && X(e, t, n, r)
        },
        addDomLoadEvent: k,
        addLoadEvent: L,
        getQueryParamValue:function(e){
        	var t=a.location.search||a.location.hash;
        	if(t){/\?/.test(t)&&(t=t.split("?")[1]);
        	if(e==null)
        		return $(t);
        	var n=t.split("&");
        	for(var r=0;r<n.length;r++)
        		if(n[r].substring(0,n[r].indexOf("="))==e)
        			return $(n[r].substring(n[r].indexOf("=")+1))}return""},
        			expressInstallCallback:function(){
        				if(w){var e=R(s);e&&v&&(e.parentNode.replaceChild(v,e),m&&(V(m,!0),T.ie&&T.win&&(v.style.display="block")),g&&g(y)),w=!1}}}}();